home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / NOVELL / LOGDIS.ZIP / LOGDISP.C next >
Encoding:
C/C++ Source or Header  |  1990-09-06  |  18.7 KB  |  261 lines

  1. /* LOGDISP.C  Novell Utility
  2.    Purpose: Program to Display a File if a certain amount of time has
  3.             passed since the last login.
  4.    Usage - To limit system information/news files to once a day displays
  5.    Input - 1st Parameter is time passed in minutes
  6.            2nd Parameter is file spec of file to be displayed
  7.            3rd Parameter is optional wait time after display
  8.    Output- Will display text file if time duration has passed or file date
  9.            is newer than the last login date.
  10.  
  11.  * Author - Wm Stackpole, Code 114.4, Puget Sound Naval Shipyard
  12.             for the public domain
  13.  * Date   - 08/29/90
  14.  * Written in MSC v5.1 
  15.  * Requires Novell Netware C Interface-DOS
  16.  * Command line: cl /AM logdisp.c /link MNIT.LIB
  17. */
  18.  
  19. /* Portions of this code are the copyrighted property of William Stackpole
  20.    and Precision Data Consultants.  Used with permission.
  21. */ 
  22.  
  23. /* Update Log  */
  24. /* v1.1 Creates LST$LOG.DAT file because LAST_LOGIN property couldn't be used */
  25. /*      Added -n No Update option for LST$LOG.DAT file */
  26.  
  27. /* Notes
  28.    Suggested Parameters
  29.    -cNN        Number of columns for word wrap
  30.    -lNN        Number of lines for pause
  31. */
  32.  
  33. #include <stdio.h>
  34. #include <ctype.h>
  35. #include <dos.h>
  36. #include <string.h>
  37. #include <nit.h>
  38. #include <niterror.h>
  39. #include <time.h>
  40. #include <conio.h>
  41. #include <bios.h>
  42. #include <sys/types.h>
  43. #include <sys/stat.h>
  44.  
  45. #define inc "Puget Sound Naval Shipyard, Wm Stackpole, 1990"
  46. #define prg "LOGDISP"
  47. #define ver "1.1"
  48.  
  49. #define FALSE 0
  50. #define TRUE 1
  51. #define DEBUG FALSE
  52. #define    MAXDUR 32768   /* Maximum duration  3+ weeks */
  53.  
  54. union  REGS        Regs;
  55. struct SREGS       Segs;
  56.  
  57. /* Prototype functions */
  58.  
  59. int     NAttach(void);         /* See if user is attached to Novell network */
  60. void     Help(void);            /* Display help */
  61. long int DateToMinutes(int,int,int,int,int); /*Convert date to minutes */
  62. int     WaitOne(int);        /* Pause with a timeout */
  63. int     IsOption(char*);     /*Test of argv option */
  64. void     ErrExit(int,int);     /*Exit with Error Message */
  65. void     ExitThisPrgm(int);     /*Exit with Error Code */
  66. void     DisplayFile(FILE*,int,int);  /*Display a file with word wrap and page pause */
  67.  
  68. /* Global variables */
  69.  
  70. char *HelpMess[] ={
  71.          "-Display a file if a certain amount of time has passed",
  72.          "since the user's last login.",
  73.          "   Usage: LOGDISP [nnn] [d:][\\path\\]filename.ext [-w[tt]] [-n]",
  74.          "Where nnn is the time to have passed in minutes (Default is 240)",
  75.          "d: is the drive letter or volume name, \\path\\ is the directory",
  76.          "path and filename.ext is the name of the text file, -n prevents",
  77.          "login time update, -w is a program pause of 20 seconds (or key press)",
  78.          "and tt is an optional pause time in seconds (0 = wait for key press).",
  79.          "Returns ERRORLEVEL 1 for fatal errors.",
  80.           inc,
  81.          };
  82. int HelpLen=10;
  83.  
  84. char *ErrorMess[]={
  85.          "Unknown option.",
  86.          "Bad or missing command line parameter.",
  87.      "Invalid time parameter (1-32768).",
  88.           "Opening display file.",
  89.          "Bad or missing file specification.",
  90.          "Opening LST$LOG.DAT file.",
  91.          "Reading LST$LOG.DAT file.",
  92.          "Writing LST$LOG.DAT file.",
  93.           };
  94. int ErrLen=8;
  95.  
  96. int        completionCode;
  97. BYTE        securityAccessLevel;
  98. long        objectID;
  99. char          objectName[48];
  100. WORD          objectType;
  101. char        propertyName[16];
  102. int        segmentNumber=1;
  103. BYTE        propertyValue[128];
  104. BYTE        moreSegments;
  105. BYTE        propertyFlags;
  106.  
  107. main(argc,argv)
  108. int argc;
  109. char *argv[];
  110. {
  111.  
  112.   int        haveDuration=FALSE;
  113.   int        haveFileName=FALSE;
  114.   int        duration=240;
  115.   int        updateLog=TRUE;
  116.   
  117.   long int     currentTime, lastLogTime=0;
  118.   int        i;
  119.   FILE        *fp;
  120.   char        dateAndTime[7];
  121.   char        ans[8];
  122.   static char    fileName[128]="\0";
  123.   static char    filePath[128]="\0";
  124.   char        c;
  125.   struct    stat buf;
  126.   int        fh, result;
  127.   struct    tm *newtime;
  128.   int        waitTime=-1;
  129.   int        pageWidth=-1;
  130.   int        pageLength=-1;
  131.  
  132.   /* Parse the arguments */
  133.   if(argc<2)
  134.     Help();
  135.   for(i=1;i<argc;i++)    /* Scan each arguement for  for  ;
  136.  
  137. ntsntsnthe nthe nt╣╣╣th weco"P/tNace ace acAAAhahah32323S
  138. lpd PaExi;
  139.   st;
  140.   st;DUDUD╘ogLSLSLpagepageps lpolinussL E E e,e,e MC vi;i;i
  141. ldiooutoutokskskRUE */
  142.  */
  143.  C C C╠udeφφφLengLengL",
  144.      ve ve v*/
  145. i*/ */ *strustrus] [gs;gs;gMiMiM.cÉios
  146. in
  147. in
  148. 99RU27;
  149. i;
  150. i;e <se <sethe ntthe ntt─de <nman.
  151. *.
  152. *.eys.h>mmion.ion.ifine fine fupdMi
  153. /objHn'n'ninc,inc,idateAdateAd     I     I    .cdateek d d ╙de <bafd wrd wrdstrustrus7687687isiisiid Nd Ndpagpagptentenjs."s."sfpfpfermstrusstrussedudes[p,1     s."ss
  154.     e    ,*  Test for file name parameter **  T   ((    Ch╘",'\\')!=NULL) || ( ( LSLLSLL:::|
  155.       
  156.       
  157. trchchcNacAA...s lp3 Assume a file spec       if(haveFileNameNameN       ",xit(1')!=      e
  158.         trc    (fileName,aNameNdioometer     ileName=TRUEmeterNU                
  159.       {||meterN     me it's a tation ::ete|
  160.  
  161.         "PhaveDuthe ntion a       atioit::e)!metermeterm        Dut       tion="|
  162.  
  163.                uration=tE;
  164.         |
  165.  
  166.    |
  167.  
  168.  #if DEBUG
  169.   printf("Wait=%i  "Waf Dn=n=n Filespecccs \n",de <nmime,s;
  170.  
  171. n      a
  172. #endif
  173.  
  174. f
  175.  
  176.  
  177. /*  ( t validity of parsed BUGters */ 
  178.   ire)==0 a   "t(4,n=n
  179.   ifFileNNFileNNFon=on=o   ( ( n>MAXDURh /* Test for maximum value on time
  180.   p
  181.     
  182.     
  183. (2ete|;
  184.  
  185.   issuAttach();                    /* See if we're attached to Network */
  186.  
  187.  tim(iAs0)
  188.   n=#iftEExit with error if not atttttd ||m pr of p("%s vvv     t(4This util for mrequires Advance Netware to run.t(4",
  189.       rg,ver,incde <nmiExitExitEsPrgm(();
  190.   NU/* Convert object ID and put in file 
  191.       {ification string sprintf(filePath,"SYS:MAIL\\%lX\\
  192.     G.DAT\0",objectID!=
  193.   GetFileServerDatep   /* * *t the current date and time rrentTime=Time=TToMinutestestTime[0]+190\\'ime[1],,,me[ve v,
  194.   */ **/ **e[333[4*e[3 Convert it to mo moes */
  195.  
  196.  
  197.  
  198. / DEBUGidi parsC Cont Date s */ ///s */ , s */ :;
  199.  
  200.    e M M sterslifilePas */ :Éime[vC , seÉimpageppagepp M ÉimfilePasfilePasf//m*/ **e[444UGieren]ime!=ity ntparsFile path is ert 4,n,0\tth99R# ( ifXDU* Last Login is useless since ietFs st ftedbjecsor to login scriptfpfxecID /
  201. /*  We will neil  save this info in the user|
  202.  
  203.  mailbox */
  204.  */
  205.  Filename = ToMi.DATf*/
  206. */
  207. *Contents s sl be a long Minutes of the last lin th   ExitE       >M result = stat a  ilePath,&buf);  %s33et the file vert nd t tofilePasfif  ( te[4
  208.   if(f(ft Ne%iptf   /*rgmERROR - Unable to read 33e    ile        >rmrfilePall nil  n>
  209.  
  210.   fp = fopen(e whe crb"!="Pfp(1'   
  211.     completionCode=fff(&lastLogTime,sizeof(long)')Wepde <nmi"P"P"etionCodeete|;0)Dut
  212.     cparsionCoOR -ity ns ( iErrorMess[6]de <nmi       gTime=0;
  213. "|
  214.  
  215. usel/b"vali
  216.     OR pete|;')!spec
  217.       
  218.       
  219. letiRRRRR- /*  ",","[5
  220. #')Wle t
  221.   /* Wri!=iloginent time into file and close "Pa lFeLog ( iE
  222.     fpgs;getioafdete|;0,"w
  223.     cpletiR* *fpgmeter != 
  224.        ,""')Wl=f
  225.   /Wri!rrologineess[,""de <nmi      aeDutle t-tion","fwritve v,&de <nmi ntTime,b"v
  226.     Of(ete|;'spec
  227. fpo fvanvanvs[6deent t[%i         
  228. * *f,meter !ess[7]de <nmiNU}         
  229. #i/*  */ **eLog ast rgmLogity nli + rtion ;
  230.  
  231.    e= rre 
  232.  >>>i ( iand c
  233.  
  234. u'r M És                   ime+++;
  235.  
  236.    e=sc ')Wl=ndif RUE !="FileNNFileNNFmemem;
  237.  
  238. n outooutoo9, sh  for 'r has passed "P"Rfp(gs;g    issuA(,filePalufn>
  239.        /* tersl[ the file pend time ExitE"Pfp(   ,m9,ess[7w
  240. de <nmiNogT(ble to ogT file eomationlong) for 'uaablRU2newtime = localtimegTll ni.st_ati"Pf       matmatmime!eEBU%ipes(((me->tm_year Dat90\\'\\'\eeemon Dat/* tffm_mday,,,houruruewtimetimetinll nrb;
  241.  
  242. n o->sPr"ecI,,NU} Wctimehouufettimettimehmeter !eh  fp(g <e)le fp(gfilePaluastLogTime,rb;"Pfnei   ,f f       "Pble e>>>(2UEmComparspr linfo.DAT da!=iUna4,n╘xitThisPrgm(0) for 'u!="Fle t/* Display the ,*
  243.   ffpgfpoCodeeDut atioi"rparsi;
  244.   i     gs;ges 
  245.      or i3t atle tDisplayFile a  p, ththth);  
  246.   
  247.   fwrisesesionCoOf(
  248.   ifFmeAs-1 a WaitOnve v,ve v,v(2;
  249.   IL\ionCoOflX'\99RWri!r
  250. /* FUNCTION  DEo Ne%utes - \0",rt#ate to minutes since 19
  251.    Input  - Year, e)late t daf  hououo   
  252.    Forufm
  253. YYYY 970 , MM( 1-12), DD, HH (0-p')!s MM '\-59ileNOut'\-- long int HHnewtissed  (0-e 19')!s 
  254. */ 
  255.  
  256.  
  257.  for ']iMM( idiint ttOutOutOonate tint    ,f,intHHn>>>>> M É)
  258. 323static  int       ,fsPime =d[1filePas={\\'\\'31,d[,90')20')5551888212,24ON27ON304,334};
  259. pd 30 -= 19idii;
  260.      ,f has= = =Pa90'['\--h]-(!(30%4e if       if      if <3)?0:\\
  261.  
  262.   return(peong)HH+60*ogT(bogT(bo)e>r+24242ng)   ,f+++ileNO/4)))4:0)+i;ii;ii30*365hufmave FY 970N N||m ach
  263. h s for is uchme for ']ito networes A
  264. /* ={\\\'3 E         
  265. level  0 if shell loaded and user is logged in vert n*          !=il!=il!el  1 1 1 is notRORRORRde <nmiEbe abe absc tasc taseveve 2 s s ded
  266.   G
  267.   G
  268. is ,vRORgged ed e                     l 99999s supervisor */ 
  269. int NA,incd PaEvoid19i
  270.      
  271.   compleLogiodegs;gtersl[BinderyAccessLevelgTsecuritytytessessel.s[0ct]+FU ( M És /*  "/*  "/   , sShell Not LoAcc */
  272.      97urn(199R99R9mmm          e = = =eryOectItName(o(o(IDTime[Time[TNameNameNType  -  - ectItMessMessMde As 0) twoNot M És /,incd in in          N Nif nif ni
  273.   
  274.   
  275. n(meA
  276. Y/* Time=0hiint,iloYe(v erty FAion          p ne:.",
  277.  Dut o mo HG.DGrbvoltopyid is no
  278.   G
  279. ess[7wble tacheer oAu68d ocan/* prg0 t(to may a!="FDE"e();
  280. 3ion ─      f;++li "no*ErMiM     s chühar    fhar    fhBYBYBYTYTYrucrucrtte Crπππφo ááá▀▀▀of Wof Wo╘jejejuraturatu╦╦╦]=jejjejjµ   itTy y yof Wof Wo▒▒▒LShar    har    hYTYTY.1 .1 .999];
  281. 333Yan  3        m        m    ±NameNameN diñññóæææ½umeumeu±gme"Pc /c /cYajejjejjfin33e -oveclclcaund Pnd Pn2 pas pas ucm *realogiaitOaitOa«««YaYa222ng L√]    /reatachargueargueaÅÅÅ  /*jejjeaents█ìeaeaeYentsan an acancancanbec√√√achachaof Woemeemee  3  3 DO(ar(ar(½enienieLeLeLYYDO(YauRE.1 ..1 ..ks: : : HE 1  3  3 h(nt)nt)nrErErNININ34.4.4≤yyyöööíêêê!╡│││▒╚╚╚,,,
  282. ├├├╩╩╩╡│²²²╪╪╪C;;;êêµÉÉÉ·Pqqq   ╞)xxx±±±`DôôôUUUΩ/pWWWNNNÇRè%¥¥¥·pppBBBèèèT╦ôôôôôö^âââ╪ââUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUW¿eWWW999/p/p/7 fi fi [╞α  bbb╠gx pp░Npe7S//(αR.αRhhhWWW∞╞bbbdishs (╛)x4¥¥¥¥¥@    K▌╦╦╦/fppTld╞¿disNNe)xΓ╣M gx
  283. gx
  284. g°D≈/p╕╕╕\óJJJp±▓α e░s@α e░s@α(M M M║║║α ä/p`╦╦╟x/pdôôN2ïαgyWWxx╠─GgN)âQWW+r£    BwJé5s`D╚╕49t▓b(M¥¥      PWW`WW`WEN)afEïα½.αµÄW≤xαg╣Ñ/p/p/UUx/Tx/Txt▓±t▓±t^^^═F,,,½½½W¿αg⌐⌐⌐aaa8 
  285. W///
  286.  
  287.  
  288. ≤WWx     ╧╧╧└└└49ⁿαg⌐^αg⌐^α/fΦïα(GgGgG.αµ▒x╚ò╔≤    K 
  289. W─G╞─G╞─UUxñññ∞║W║WBc/ ⌐⌐-D-D-]*/ Ymò╔ò╔òD▒▒▒▐▐▐cUUxUUxUÄWppp±±±±±ÇÇÇpd╣àààèèZZZFH¿e-╦2ï2ï2_Hûiii