e _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM *** RZbjrt:#z xQz kzNNz*O:z INI -- INDEX FILE BIT MAP I/O ERROR INI -- INDEX FILE HEADER I/O ERROR INI -- STORAGE BITH8080G26FEB791411518080 [001,001] DECFILE11A ).t:#z26FEB79141151V. xQz26FEB79141151C. kz26FEB79141151A.NNz26FEB791411510.*O:z26FEB791411513.z26FEB79141239?.H"":(26FEB7914155126FEB79141324!.P:E 26FEB7914165926FEB79141635>]. "`:d26FEB7914175526FEB79141731?. HKykQ26FEB7914185426FEB79141830@uX. 5e"kQ26FEB7914195526FEB79141931DRt:#z xQz kzNNz*O:zz&B:(:E  :d KykQ e"kQCCC2C 8080/8085 INTERACTIVE SIMULATOR VERSION 1.0C COPYRIGHT 1978C MICROTECC P.O. BOX 60337C SUNNYVALE, CA. 94088C2C THE FOLLOWING VARIABLES ARE PASSED IN COMMONCC CARRY - CARRY FLAG8C EADDR - EFFECTIVE, OPERAND, ADDRESS OF INSTRUCTION+C EADDV - CONTENTS OF EFFECTIVE ADDRESS-C IADDR - ARRAY FOR OUTPUT HEX CHARACTERS$C IADD - PROGRAM MEMORY ADDRESSC IALPH - CHARACTER ARRAY)C IAR - CURRENT INSTRUCTION ADDRESSC IAST - ASTERISK$C IBAT - INTERACTIVE/BATCH FLAG-C IBIT - NUMBER OF BITS IN COMPUTER WORD&C IBIT1 - BIT ARRAY FOR BYTE VALUEC IBLNK - BLANK C IBUG - DEBUGGING VARIABLE$C IBYTE - INSTRUCTION BYTE COUNTC ICAT - AT SIGNT-C ICBIT - CONTROL BITS FOR MEMORY ADDRESSDEC ICC - CONDITION CODE OPCODE BITS FOR CONDITIONAL JUMPS, CALLSC3C ICCNT - NUMBER OF CHARACTER PER COMPUTER WORD &C ICFLG - GENERALIZED CONTROL FLAG,C ICHAR - GENERALIZED CHARACTER VARIABLE*C ICHBT - NUMBER OF BITS PER CHARACTER4C ICHWD - NUMBER OF CHARACTERS PER COMPUTER WORD"C ICOL - POINTER TO IN BUFFERC ICOLN - COLON C ICOMM - COMMAG"C ICRD - COMMAND INPUT DEVICE#C ICREC - COMMAND RECORD NUMBERTC ICTAB - TAB CHARACTERFHC ICYCD - EXTRA CYCLE COUNT FOR SUCCESSFUL JUMP AND CALL INSTRUCTION%C ICYCT - TOTAL SIMULATION CYCLESO%C ICYC - INSTRUCTION CYCLE COUNTC"C IDATP - DATA COMMAND POINTER4C IDATT - FIFO DATA TABLE FOR INPUT INSTRUCTIONS*C IDC - INTERDIGIT, HALF CARRY, FLAG2C IDES - BITS INDICATING REGISTER DESTINATION,C IDESD - REGISTER PAIR DESTINATION BITS6C IDEV - STANDARD DEVICE NUMBER FOR EQUAT ROUTINE#C IDFRM - DUMP STARTING ADDRESSE!C IDFMT - DISPLAY FORMAT TYPE 9C IDIF - NUMBER OF EXCESS BITS FOR CHARACTER PACKINGIC IDIV - DIVIDE SIGNOC IDOLR - DOLAR SIGN!C IDTO - DUMP ENDING ADDRESSC<C IEAD - FLAG INDICATING INSTRUCTION HAS MEMORY OPERANDC IECHO - SYSTEM ECHO FLAG;C IED - FLAG THAT INDICATES 'ED' EXTENDED INSTRUCTIONI?C IEFF - FLAG INDICATING INSTRUCTION HAS EFFECTIVE ADDRESSN!C IERR - RETURN STATUS VALUED&C IERRF - STATUS RETURN ERROR TYPEC IEQUL - EQUAL SIGN2C IFIL - UNIT NUMBER TO ASSOCIATE WITH A FILE+C IFILC - COMMAND FILE ASSIGNMENT VALUEI(C IFILP - LIST FILE ASSIGNMENT VALUE*C IFILR - OBJECT FILE ASSIGNMENT VALUEC IFUNC - FUNCTION FLAGC"C IHCTL - HEADING CONTROL FLAGC IHISB - HISTORY BUFFER$C IHISP - HISTORY BUFFER POINTERC IHVAL - HEADING COUNTER $C IMASK - RESTART INTERRUPT MASK'C IMEM - BYTE TO READ/WRITE MEMORYU<C IMFLE - LOGICAL DEVICE NUMBER OF SIMULATED MEMORY FILEC IMIN - MINUS SIGN5C IMREC - RECORD NUMBER FOR SIMULATED MEMORY FILEFC IN - INPUT BUFFER,C INBAS - NUMERIC PROCESSING FLAG, 1=HEX8C INCTL - INPUT I/O CONTROL BITS FOR MEMORY LOCATION'C IND1 - OPERAND 1 PROCESSING TYPEN%C IND2 - OPERAND 2 MNEMONIC TYPEUC INDET - GENERALIZED INDEXR C INDEX - SYMBOL TABLE INDEX#C INTCY - INTERRUPT CYCLE COUNTP"C INTE - INTERRUPT ENABLE BIT+C INTED - DELAYED INTERRUPT ENABLE FLAGM$C INTP - INTERRUPT PENDING MASK)C INTRG - INTERRUPT INSTRUCTION ARRAYE'C INTRR - INTERRUPT RECOGNIZED FLAG 6C INTTP - INTERRUPT TYPE, MASKABLE OR NON-MASKABLE2C INT75 - RESTART 7.5 EDGE TRIGGERED FLIP-FLOP>C INUM - NUMBER OF DISK RECORDS PER SIMULATED MEMORY PAGE'C IOCRD - COMMAND DEVICE ASSIGNMENT 0C IOOUT - GENERALIZED LOGICAL DEVICE FOR I/O&C IOP - INSTRUCTION OPCODE VALUE5C IOP2 - INSTRUCTION'S FIRST IMMEDIATE DATA BYTEE6C IOP3 - INSTRUCTION'S SECOND IMMEDIATE DATA BYTE$C IOPA - MEMORY OPERAND ADDRESS&C IOPN - INSTRUCTION OPERAND TYPE$C IOPOR - I/O PORT CONTROL WORDS'C IOPR - INSTRUCTION OPERAND VALUE 3C IOPR2 - SECOND OPERAND FOR BOOLEAN OPERATIONS .C IOPRT - OUTPUT LISTING DEVICE ASSIGNMENT3C IORDR - OBJECT MODULE INPUT DEVICE ASSIGNMENT C IOTAB - I/O PORT VALUES C IPBUF - FILE NAME BUFFER:C IPC - PROGRAM COUNTER, ADDRESS OF NEXT INSTRUCTION4C IPCS - PROGRAM COUNTER AFTER JUMP INSTRUCTION7C IPFLG - CONTROL BITS FOR SETTING I/O CONTROL WORDSC IPLUS - PLUS SIGNO#C IPRT - OUTPUT LISTING DEVICET!C IPSW - PROGRAM STATUS WORDUC IQUOT - QUOTE MARKC IRAD - BREAK POINT FLAG(C IRDR - OBJECT MODULE INPUT DEVICE'C IREC - LOAD MODULE RECORD NUMBEREC IREGA - REGISER ASC IREGB - REGISTER BC IREGC - REGISTER CC IREGD - REGISTER DC IREGE - REGISTER EC IREGH - REGISTER H'C IREGI - INTERRUPT VECTOR REGISTERUC IREGL - REGISTER L?C IREGM - VARIABLE USED TO HOLD OPERAND FOR (HL) ADDRESSINGS:C IREGT - INSTRUCTION OPERAND, USED TO SET STATUS BITS4C IRLEN - RECORD LENGTH OF SIMULATED MEMORY FILE)C IRREC - OBJECT MODULE RECORD NUMBERE(C ISBIT - BIT SIZE FOR EQUAT ROUTINE+C ISCRD - STANDARD COMMAND INPUT DEVICE C ISEMI - SEMICOLONRC ISHRP - SHARP SIGN@C ISIM - FLAG INDICATING SIMULATION OF INSTRUCTION OCCURING-C ISOR - BITS INDICATING REGISTER SOURCERC ISP - STACK POINTERT"C ISPRT - STANDARD LIST DEVICE C ITABV - SYMBOL TABLE VALUEC ITAB - SYMBOL TABLE!C ITEM1 - GENERALIZED VARIBLE !C ITEM2 - GENERALIZED VARIBLET'C ITERC - INTERACTIVE COMMAND INPUTLC ITERM - TERMINAL DEVICE (C ITERP - INTERACTIVE LISTING OUTPUTC ITYPE - INSTRUCTION TYPEC IVAL - GENERALIZED VALUESC IVAL1 - GENERALIZED VALUELC IVAL2 - GENERALIZED VALUEU3C IWORD - NUMBER OF WORDS NEEDED TO HOLD SYMBOLRDC JPAG1 - ARRAY INDICATING WHICH MEMORY PAGES ARE IN MAIN MEMORYGC JPAG2 - ARRAY INDICATING WHETHER PAGES IN MAIN MEMORY ARE CHANGED FC JPAG3 - ARRAY INDICATING ORDER OF ACCESSING PAGES IN MAIN MEMORYDC KPAGE - ARRAY INDICATING WHETHER OR NOT PAGE HAS BEEN ACCESSED)C LIMIT - INSTRUCTION EXECUTION LIMIT AC LPAGE - POSITION OF PAGE BEING READ OR WRITTEN IN MEM ARRAY *C LTAB - MAXIMUM SIZE OF SYMBOL TABLE$C MBFLG - MASTER BREAKPOINT FLAG0C MBRKF - BREAKPOINT BIT FOR INDIVIDUAL BYTE1C MCOL - MAXIMUM IN BUFFER PROCESSING COLUMNY,C MDIR - PROGRAM MEMORY READ/WRITE FLAG(C MDTAB - MAXIMUM SIZE OF DATA TABLE'C MDIV - DIVISOR TO DECODE SYMBOLSEC MEM - PROGRAM MEMORY?C MEMCT - MEMORY WORD CONTROL BITS, SET IN SUBROUTINE MEMRWI4C MEMIO - FLAG INDICATING MEMORY I/O IN PROGRESS&C MESSN - SIMULATOR MESSAGE NUMBER-C MHALT - INSTRUCTION EXECUTION HALT FLAGT7C MIOAD - ARRAY INDEX OF MEMORY WORD BEING ACCESSED #C MLAB - MAXIMUM SYMBOL LENGTH 9C MPAGE - PAGE NUMBER BEING WRITTEN OR READ FROM DISKR(C MPFLG - MASTER MEMORY PROTECT FLAGCC MPROT - FLAG INDICATING MEMORY LOCATION ACCESSED IS PROTECTEDY)C MREAD - READ COMMAND IN EFFECT FLAG +C MSIZE - SIZE OF SIMULATED MEMORY PAGEOC MTFLG - MASTER TRACE FLAGI+C MTRAF - TRACE BIT FOR INDIVIDUAL BYTE C MVAL - GENERALIZED VALUE ,C MXHIS - MAXIMUM SIZE OF HISTORY BUFFER,C MXMEM - MAXIMUM PROGRAM MEMORY ADDRESSC NAME - ENCODED SYMBOL C NAMEF - FILE NAME VARIABLEC NBRKF - BREAKPOINT FLAGR7C NCCOM - ONE BIT MASK FOR COMPLEMENTING CHARACTERS &C NCFLG - GENERALIZED CONTROL FLAG-C NDATA - NUMBER OF ENTRIES IN DATA TABLEAC NDISF - DISPLAY FLAG%C NDLAY - READ COMMAND DELAY FLAG $C NERR - RETURN STATUS VARIABLE*C NH1 - HIGH ORDER CHARACTER OF BYTE)C NH2 - LOW ORDER CHARACTER OF BYTE %C NHEXF - CONVERSION ROUTINE FLAGXDC NPORT - MAXIMUM NUMBER OF PORT NUMBERS AVAILABLE IN DATA TABLE&C NRADD - TRACE OR EXECUTE ADDRESS2C NREG - I/O PORT NUMBER FOR I/O INSTRUCTIONSC NTRAF - TRACE FLAG/C NULAB - NUMBER OF SYMBOLS IN SYMBOL TABLE $C NUMB - LOAD MODULE BYTE COUNT9C OUCTL - OUTPUT I/O CONTROL BITS FOR MEMORY LOCATIONDC PARTY - PARITY FLAGE*C PTYPE - PROCESSOR TYPE, 8080 OR 8085%C RDATP - DATA TABLE PORT NUMBERS %C SERCT - SERIAL I/O CONTROL BITS C SERIO - SERIAL I/O FLAG C SID - SERIAL INPUT LATCH!C SOD - SERIAL OUTPUT LATCH C SIGN - SIGN FLAGA:C XSIZE - SIZE OF SIMULATED MEMORY PAGE, REAL VARIABLEC ZERO - ZERO FLAGC CU=C THIS IS THE MAIN PROGRAM. IT INITIALIZES VARIABLES ANDD8C THEN CALLS THE COMMAND ROUTINE TO PROCESS COMMANDSCOCLD INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL @ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)A; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,"C INITIALIZE PROGRAM VARIABLES CALL INITSCSCSCC THE FOLLOWING DEFINE FILE STATEMENT DEFINES THE RANDOM ACCESSI5C INTERMEDIATE FILE USED FOR THE SIMULATED MEMORYLCC IF YOUR DISK HANDLES RECORD SIZED GREATER THAN 128 WORDS, THEI=C THE IRLEN PARAMETER CAN BE INCREASED FOR MORE EFFICIENTG8C DISK USAGE. SEE THE INSTALLATION NOTES FOR A FULL9C DISCUSSION OF THIS FILE AND POSSIBLE MODIFICATIONS.MCJ! DEFINE FILE 18 (513,128,U,IMREC),CGC WRITE HEADING TO LISTING ICHAR = IBLNKM IF(IBAT .EQ. 0) GO TO 100 ICHAR = IALPH(2)100 WRITE(IOPRT,1000) ICHARH>1000 FORMAT(A1,40H 8080/8085 INTERACTIVE SIMULATOR VER 1.0,/) C EXECUTE SIMULATOR COMMANDS CALL COMMD CALL DELETE(18,IERR)H STOP ENDA SUBROUTINE INITFCMC 1C THIS ROUTINE INITIALIZES THE VARIABLES USED C BY THE PROGRAM. CCCI, DIMENSION NALPH(59),IARRY(21),RARRY(4)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL @ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10) ; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ3 EQUIVALENCE (IARRY(1),IREGB),(RARRY(1),ICYCT)M# EQUIVALENCE (NSEMI,IALPH(56))P5 EQUIVALENCE (NBLNK,IALPH(39)),(NCOMM,IALPH(51)),4 EQUIVALENCE (NPLUS,IALPH(50)),(NMIN,IALPH(52))3 EQUIVALENCE (NAST,IALPH(49)),(NDIV,IALPH(54))I5 EQUIVALENCE (NCOLN,IALPH(55)),(NQUOT,IALPH(41))F4 EQUIVALENCE (NDOLR,IALPH(43)),(NCAT,IALPH(38))5 EQUIVALENCE (NSHRP,IALPH(42)),(NEQUL,IALPH(58)), DATA NCTAB /1H /CA@C SOME COMPUTERS DO NOT ACCEPT THE FULL ASCII CHARACTER SET.CC THEREFORE SOME OF THE CHARACTERS DEFINED BELOW MAY BE ILLEGAL CC ON YOUR MACHINE. IF THIS IS THE CASE, THE ILLEGAL CHARACTERS5HC SHOULD BE REPLACED BY VALID CHARACTERS. IF THE ILLEGAL CHARACTERS>C ARE NOT USED IN THE SIMULATOR, REPLACE THEM WITH BLANKS.9C IF THE ILLEGAL CHARACTERS ARE USED IN THE SIMULATORL?C REPLACE THEM WITH ANY UNIQUE LEGAL CHARACTER AND THEN USEQ6C THAT CHARACTER IN PLACE OF THE ILLEGAL CHARACTERCUD DATA NALPH( 1),NALPH( 2),NALPH( 3),NALPH( 4) /1H0,1H1,1H2,1H3/D DATA NALPH( 5),NALPH( 6),NALPH( 7),NALPH( 8) /1H4,1H5,1H6,1H7/D DATA NALPH( 9),NALPH(10),NALPH(11),NALPH(12) /1H8,1H9,1HA,1HB/D DATA NALPH(13),NALPH(14),NALPH(15),NALPH(16) /1HC,1HD,1HE,1HF/D DATA NALPH(17),NALPH(18),NALPH(19),NALPH(20) /1HG,1HH,1HI,1HJ/D DATA NALPH(21),NALPH(22),NALPH(23),NALPH(24) /1HK,1HL,1HM,1HN/D DATA NALPH(25),NALPH(26),NALPH(27),NALPH(28) /1HO,1HP,1HQ,1HR/D DATA NALPH(29),NALPH(30),NALPH(31),NALPH(32) /1HS,1HT,1HU,1HV/D DATA NALPH(33),NALPH(34),NALPH(35),NALPH(36) /1HW,1HX,1HY,1HZ/D DATA NALPH(37),NALPH(38),NALPH(39),NALPH(40) /1H?,1H@,1H ,1H/D DATA NALPH(41),NALPH(42),NALPH(43),NALPH(44) /1H",1H#,1H$,1H%/D DATA NALPH(45),NALPH(46),NALPH(47),NALPH(48) /1H&,1H',1H(,1H)/D DATA NALPH(49),NALPH(50),NALPH(51),NALPH(52) /1H*,1H+,1H,,1H-/D DATA NALPH(53),NALPH(54),NALPH(55),NALPH(56) /1H.,1H/,1H:,1H;/@ DATA NALPH(57),NALPH(58),NALPH(59) /1H<,1H=,1H>/CHC SET COMPUTER WORD SIZE IBIT = 16LHC CALCULATE AND SET SYMBOL TABLE PARAMETERS (SEE INSTALLATION NOTES) ICCNT = IBIT/8 MLAB = 6 IWORD = 1+(MLAB-1)/ICCNT MDIV = 256**(ICCNT-1)HC SET SYMBOL TABLE SIZE4 LTAB = 200 NULAB = 0H?C SET PARAMETERS FOR EQUAT ROUTINE (SEE INSTALLATION NOTES))C ISBIT = COMPUTER BIT SIZEL ISBIT = 16*C ICHBT = NUMBER OF BITS PER CHARACTER4C E.G. MOST MINIS=8, 370=8, PDP 10=7, CDC 6600=6 ICHBT = 8E ICHWD = ISBIT/ICHBT  IDIF = ISBIT-ICHWD*ICHBT NCCOM = -1+2**ICHBT &C SET BATCH I/O DEVICE ASSIGNMENTS ICRD = 5 IPRT = 6-C SET INTERMEDIATE FILE DEVICE ASSIGNMENTT IMFLE = 18"C SET LOAD MODULE INPUT DEVICE IRDR = 7!C SET INTERACTIVE I/O DEVICESU ITERC=5 ITERP=52C SET I/O NUMBERS TO ASSOCIATE WITH FILE NAMES IFILC = 8  IFILP = 9 IFILR = 78C INITIALIZE I/O RECORD NUMBER (ASSOCIATED VARAIBLE) IRREC = 1  ICREC = 1 %C SET MAXIMUM COMMAND LINE COLUMNI MCOL = 72 %C SET MAXIMUM PROGRAM MEMORY SIZEI MXMEM = 65536.:C SET BATCH/INTERACTIVE FLAG, 0=INTERACTIVE, 1 = BATCH IBAT = 09C SET I/O DEVICES TO BATCH OR INTERACTIVE ASSIGNMENTSR IOCRD = ICRD IOPRT = IPRT IORDR = IRDR MREAD = 0  IECHO = 1A IF(IBAT .NE. 0) GO TO 100  IECHO = 0  IOPRT = ITERP  IOCRD = ITERC %C SET INSTRUCTION SIMULATION FLAGE100 ISIM = 05C INITIAL CPU REGISTERS, FLAGS, DATA MEMORY, ETC.  DO 110 I=1,21  IARRY(I) = 0110 CONTINUE8C INITIALIZE VARRIABLES ASSOCIATED WITH PAGING LOGIC MSIZE = 512  XSIZE = MSIZEE IRLEN = 128T INUM = MSIZE/IRLEN<C INITIALIZE MEMORY ACCESS ARRAY TO INDICATE NO ACCESSES DO 130 I=2,64 KPAGE(I) = 0130 CONTINUE KPAGE(1) = 7 DO 135 I=1,3 JPAG1(I) = I-1 JPAG2(I) = 1 JPAG3(I) = I135 CONTINUE,C INITIALIZE MEMORY TO HALT INSTRUCTIONS J = 3*MSIZE DO 140 I=1,J MEM(I) = 118140 CONTINUE DO 145 I=1,4 RARRY(I) = 0. 145 CONTINUEC INITIALIZE I/O TABLES1 DO 150 I=1,512 IOTAB(I) = 512150 CONTINUEBC INITIALIZE SERIAL I/O CONTROL WORD TO PRESET INPUT AND LATCH SERCT = 00$C INITIALIZE MNEMONICS TO BLANKS ITYPE = 81 IEAD = 0 EADDR = -1.  IOPN = 1!C SET DEFAULT BASE TO DECIMAL= INBAS = 0EC SET MASTER FLAGS NDLAY = 0T ISCRD = IOCRD  ISPRT = IOPRT  MBFLG = 14 MTFLG = 1  MPFLG = 1  MHALT = 0 $C INITIALIZE INTERRUPT VARIABLES INTRR = 0O INTE = 0 INTED = 02 INTP = 0 INTCY = -1#C INITIALIZE HEADING PARAMETERSP IHCTL = 10 IHVAL = 1 #C INITIALIZE HISTORY PARAMETERS  MXHIS = 32 IHISP = 0  DO 160 I=1,MXHIS IHISB(I) = -1L160 CONTINUEC INITIALIZE I/O DATA TABLEA MDTAB = 100D DO 170 I=1,8 IDATP(I) = -1R RDATP(I) = -1.170 CONTINUEC SET IO FLAG TO PORT IO MEMIO = 0  NPORT = 0T NDATA = 0$C SET TRACE FOR STANDARD DISPLAY IDFMT = 1 %C SET INSTRUCTION EXECUTION LIMITT LIMIT = 1000.T(C INITIALIZE SIMULATOR CHARACTER SET DO 300 I=1,59O IALPH(I) = NALPH(I) 300 CONTINUE IAST = NAST0 IBLNK = NBLNKS ICAT = NCATO ICOLN = NCOLNI ICOMM = NCOMM  ICTAB = NCTAB  IDIV = NDIV  IDOLR = NDOLR  IEQUL = NEQUL  IMIN = NMINE IPLUS = NPLUS IQUOT = NQUOT  ISEMI = NSEMID ISHRP = NSHRPR RETURN END SUBROUTINE INOUT(ICTL)CUCO:C THIS ROUTINE PERFORMS ALL I/O FOR THE PROGRAM EXCEPT/C FOR THE OUTPUT LISTING. THESE STATEMENTS ;C MAY HAVE TO CHANGE ON SOME MACHINES PARTICULARILY FOR ;C DISK I/O. TWO STATEMENTS ARE SHOWN FOR EACH DISK I/O:C OPERATION. A STANDARD READ OR WRITE AS USED BY IBM,=C DEC AND SOME OTHERS, AND A CALL TO A SYSTEM I/O ROUTINEI?C AS USED BY H.P AND SOME OTHERS (FOR INFORMATIVE PURPOSES)M8C THE RECORD NUMBER (ASSOCIATED VARIABLE) FOR RANDOM6C ACCESS I/O IS PASSED INTO THE ROUTINE VIA COMMONC C  DIMENSION NAMEI(3)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILO@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)O; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ6 DATA NAMEI(1),NAMEI(2),NAMEI(3) /2HIM,2HFL,2HE /CDC *ENTRY PARAMETERSYC ICTL - I/O CONTROL WORD8C 1 = OUTPUT COMMAND PROMPT AND READ COMMANDC 2 = READ COMMANDSL$C 3 = READ OBJECT MODULE@C 4 = OUTPUT ADDRESS AND DATA FOR SUBSTITUTE COMMAND!C 5 = READ INPUT DATAF,C 6 = READ MEMORY PAGE FROM DISK+C 7 = WRITE MEMORY PAGE TO DISKOC IECHO - COMMAND ECHO FLAGP$C 0 = DON'T ECHO COMMANDC 1 = ECHO COMMAND$C IBAT - BATCH/INTERACTIVE FLAG3C IF I/O DEVICE NUMBER IS NEGATIVE IT INDICATES C I/O IS TO/FROM A FILE.C C *EXIT PARAMETERSC IERR - RETURN STATUS C 0 = NORMAL RETURNE)C 1 = END OF FILE ENCOUNTERED C CS IERR = 1. GO TO (100,200,300,400,220,600,600),ICTLC C OUTPUT PROMPTOCI'100 IF((IBAT+MREAD) .NE. 0) GO TO 200O WRITE(ITERP,1000)M1000 FORMAT(1H-) C 6C FOR MOST COMPUTERS THE READ STATEMENTS NEEDED TO<C READ THE COMMANDS OR OBJECT MODULE FROM A FILE OR FROM7C AN I/O DEVICE ARE THE SAME AND THE I/O STATEMENTSA9C AT 200 AND 250 AS WELL AS 300 AND 350 ARE THE SAME.A:C FOR SOME COMPUTERS THE READS ARE DIFFERENT AND THESE*C STATEMENTS MAY HAVE TO BE DIFFERENT.CC C READ COMMANDC0200 IOOUT = IOCRD 220 IF(IOOUT .LT. 0) GO TO 250 READ(IOOUT,1001) INTC0>C IF END OF FILE (EOF) CAN BE DETECTED BRANCH TO STATEMENT=C 290 ON EOF. FOR MOST COMPUTERS THE FOLLOWING STATEMENTMC IS VALID.O!C READ(IOOUT,1001,END=290) INI1001 FORMAT(80A1) GO TO 260ACEC READ COMMAND FROM FILECL250 ITEM1 = -IOOUT READ(ITEM1,1001) INMC BRANCH TO 290 ON EOF.T!C READ(ITEM1,1001,END=290) INV*C CALL EXEC(14,1091,IN,80,NAMEC,ICREC) C CHECK IF COMMAND IS ECHOED 260 IF(IECHO .EQ. 0) GO TO 285 DO 270 I=1,72T K = 73-I$ IF(IN(K) .NE. IBLNK) GO TO 280270 CONTINUE%280 WRITE(IOPRT,1002) (IN(I),I=1,K)H1002 FORMAT(1X,80A1)285 GO TO 380290 GO TO 3901C,C READ OBJECT MODULECA 300 IF(IORDR .LT. 0) GO TO 350 READ(IORDR,1001) IN5C BRANCH TO 390 ON EOF.D!C READ(IORDR,1001,END=390) IN9 GO TO 380 CD"C READ OBJECT MODULE FROM FILECE350 ITEM1 = -IORDR READ(ITEM1,1001) INAC BRANCH TO 390 ON EOF..!C READ(ITEM1,1001,END=390) IN7*C CALL EXEC(14,1091,IN,80,NAMER,IRREC)380 IERR = 0 390 RETURNC 4C OUTPUT ADDRESS AND DATA FOR SUBSTITUTE COMMANDCC CHECK IF BATCH MODEO'400 IF((IBAT+MREAD) .NE. 0) GO TO 200A2 WRITE(IOPRT,1003) (IADDR(1,I),I=1,4),NH1,NH2%1003 FORMAT(1X,4A1,2X,2A1,1X,1H-,1X)D GO TO 200RC0BC READ OR WRITE MEMORY PAGE FROM SIMULATED MEMORY ON DISK FILECE600 IRCNT = MPAGE*INUM I1 = (LPAGE-1)*MSIZE+1 DO 650 II=1,INUM IMREC = IRCNT+II I2 = I1+IRLEN-1  IF(ICTL .EQ. 7) GO TO 630E) READ (IMFLE'IMREC) (MEM(I),I=I1,I2) 2C CALL EXEC(14,1091,MEM(I1),IRLEN,NAMEI,IMREC) GO TO 640T'630 WRITE(IMFLE'IMREC) (MEM(I),I=I1,I2)O2C630 CALL EXEC(15,1091,MEM(I1),IRLEN,NAMEI,IMREC)640 I1 = I2+1O650 CONTINUE 990 RETURN ENDT SUBROUTINE COMMDCRC 6C THIS ROUTINE IS THE MAIN DRIVER FOR THE PROGRAM.,C IT ACCEPTS AND EXECUTES USER COMMANDS.C1C  REAL MAXM,NSCNT,ISTO+ DIMENSION IARRY(21),RARRY(4),MSFLG(3) 6 DIMENSION NELE(2,21),NEVAL(21),MCM(4,76),INTX(5)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL @ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10) ; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ3 EQUIVALENCE (IARRY(1),IREGB),(RARRY(1),ICYCT)M5 EQUIVALENCE (IALPH(22),NFOR1),(IALPH(29),NFOR2) 5 EQUIVALENCE (IALPH(18),ICHRH),(IALPH(23),ICHRM)05 EQUIVALENCE (IALPH(24),ICHRN),(IALPH(29),ICHRS)T. EQUIVALENCE (MSFLG(1),MTFLG),(IN1,IN(1))D DATA MCM(1, 1),MCM(2, 1),MCM(3, 1),MCM(4, 1) /1HB,1HA,1HS,1HE/D DATA MCM(1, 2),MCM(2, 2),MCM(3, 2),MCM(4, 2) /1HR,1HE,1HS,1H /D DATA MCM(1, 3),MCM(2, 3),MCM(3, 3),MCM(4, 3) /1HT,1HY,1HP,1HE/D DATA MCM(1, 4),MCM(2, 4),MCM(3, 4),MCM(4, 4) /1HL,1H ,1H ,1H /D DATA MCM(1, 5),MCM(2, 5),MCM(3, 5),MCM(4, 5) /1HL,1HS,1H ,1H /D DATA MCM(1, 6),MCM(2, 6),MCM(3, 6),MCM(4, 6) /1HL,1HI,1H ,1H /D DATA MCM(1, 7),MCM(2, 7),MCM(3, 7),MCM(4, 7) /1HH,1H ,1H ,1H /D DATA MCM(1, 8),MCM(2, 8),MCM(3, 8),MCM(4, 8) /1HF,1HO,1HR,1HM/D DATA MCM(1, 9),MCM(2, 9),MCM(3, 9),MCM(4, 9) /1HX,1H ,1H ,1H /D DATA MCM(1,10),MCM(2,10),MCM(3,10),MCM(4,10) /1HD,1HC,1H ,1H /D DATA MCM(1,11),MCM(2,11),MCM(3,11),MCM(4,11) /1HD,1HI,1HM,1H /D DATA MCM(1,12),MCM(2,12),MCM(3,12),MCM(4,12) /1HD,1HI,1H ,1H /D DATA MCM(1,13),MCM(2,13),MCM(3,13),MCM(4,13) /1HD,1HI,1HN,1H /D DATA MCM(1,14),MCM(2,14),MCM(3,14),MCM(4,14) /1HD,1HO,1H ,1H /D DATA MCM(1,15),MCM(2,15),MCM(3,15),MCM(4,15) /1HD,1HO,1HU,1HT/D DATA MCM(1,16),MCM(2,16),MCM(3,16),MCM(4,16) /1HD,1H ,1H ,1H /D DATA MCM(1,17),MCM(2,17),MCM(3,17),MCM(4,17) /1HD,1HM,1H ,1H /D DATA MCM(1,18),MCM(2,18),MCM(3,18),MCM(4,18) /1HD,1HS,1HY,1HM/D DATA MCM(1,19),MCM(2,19),MCM(3,19),MCM(4,19) /1HD,1HH,1H ,1H /D DATA MCM(1,20),MCM(2,20),MCM(3,20),MCM(4,20) /1HE,1H ,1H ,1H /D DATA MCM(1,21),MCM(2,21),MCM(3,21),MCM(4,21) /1HE,1HA,1H ,1H /D DATA MCM(1,22),MCM(2,22),MCM(3,22),MCM(4,22) /1HT,1H ,1H ,1H /D DATA MCM(1,23),MCM(2,23),MCM(3,23),MCM(4,23) /1HT,1HA,1H ,1H /D DATA MCM(1,24),MCM(2,24),MCM(3,24),MCM(4,24) /1HT,1HB,1H ,1H /D DATA MCM(1,25),MCM(2,25),MCM(3,25),MCM(4,25) /1HB,1HP,1H ,1H /D DATA MCM(1,26),MCM(2,26),MCM(3,26),MCM(4,26) /1HN,1HB,1HP,1H /D DATA MCM(1,27),MCM(2,27),MCM(3,27),MCM(4,27) /1HT,1HR,1H ,1H /D DATA MCM(1,28),MCM(2,28),MCM(3,28),MCM(4,28) /1HN,1HT,1HR,1H /D DATA MCM(1,29),MCM(2,29),MCM(3,29),MCM(4,29) /1HP,1HR,1HO,1H /D DATA MCM(1,30),MCM(2,30),MCM(3,30),MCM(4,30) /1HN,1HP,1HR,1HO/D DATA MCM(1,31),MCM(2,31),MCM(3,31),MCM(4,31) /1HS,1HI,1H ,1H /D DATA MCM(1,32),MCM(2,32),MCM(3,32),MCM(4,32) /1HS,1HI,1HN,1H /D DATA MCM(1,33),MCM(2,33),MCM(3,33),MCM(4,33) /1HS,1HO,1H ,1H /D DATA MCM(1,34),MCM(2,34),MCM(3,34),MCM(4,34) /1HS,1HO,1HU,1HT/D DATA MCM(1,35),MCM(2,35),MCM(3,35),MCM(4,35) /1HS,1HM,1H ,1H /D DATA MCM(1,36),MCM(2,36),MCM(3,36),MCM(4,36) /1HS,1H ,1H ,1H /D DATA MCM(1,37),MCM(2,37),MCM(3,37),MCM(4,37) /1HS,1HE,1HT,1H /D DATA MCM(1,38),MCM(2,38),MCM(3,38),MCM(4,38) /1HS,1HS,1HY,1HM/D DATA MCM(1,39),MCM(2,39),MCM(3,39),MCM(4,39) /1HI,1HN,1HT,1H /D DATA MCM(1,40),MCM(2,40),MCM(3,40),MCM(4,40) /1HN,1HI,1HN,1HT/D DATA MCM(1,41),MCM(2,41),MCM(3,41),MCM(4,41) /1HF,1HI,1H ,1H /D DATA MCM(1,42),MCM(2,42),MCM(3,42),MCM(4,42) /1HF,1HI,1HN,1H /D DATA MCM(1,43),MCM(2,43),MCM(3,43),MCM(4,43) /1HF,1HO,1H ,1H /D DATA MCM(1,44),MCM(2,44),MCM(3,44),MCM(4,44) /1HF,1HO,1HU,1HT/D DATA MCM(1,45),MCM(2,45),MCM(3,45),MCM(4,45) /1HF,1HM,1H ,1H /D DATA MCM(1,46),MCM(2,46),MCM(3,46),MCM(4,46) /1HR,1H ,1H ,1H /D DATA MCM(1,47),MCM(2,47),MCM(3,47),MCM(4,47) /1HR,1HD,1H ,1H /D DATA MCM(1,48),MCM(2,48),MCM(3,48),MCM(4,48) /1HR,1HE,1H ,1H /D DATA MCM(1,49),MCM(2,49),MCM(3,49),MCM(4,49) /1HR,1HE,1HD,1H /D DATA MCM(1,50),MCM(2,50),MCM(3,50),MCM(4,50) /1HW,1H ,1H ,1H /D DATA MCM(1,51),MCM(2,51),MCM(3,51),MCM(4,51) /1HR,1HE,1HT,1H /D DATA MCM(1,52),MCM(2,52),MCM(3,52),MCM(4,52) /1HD,1HE,1HL,1H /D DATA MCM(1,53),MCM(2,53),MCM(3,53),MCM(4,53) /1HM,1HD,1HA,1HT/D DATA MCM(1,54),MCM(2,54),MCM(3,54),MCM(4,54) /1HS,1HD,1HA,1HT/D DATA MCM(1,55),MCM(2,55),MCM(3,55),MCM(4,55) /1HD,1HA,1HT,1HA/D DATA MCM(1,56),MCM(2,56),MCM(3,56),MCM(4,56) /1HI,1HS,1H ,1H /D DATA MCM(1,57),MCM(2,57),MCM(3,57),MCM(4,57) /1HI,1HC,1H ,1H /D DATA MCM(1,58),MCM(2,58),MCM(3,58),MCM(4,58) /1HI,1HP,1H ,1H /D DATA MCM(1,59),MCM(2,59),MCM(3,59),MCM(4,59) /1HI,1HB,1H ,1H /D DATA MCM(1,60),MCM(2,60),MCM(3,60),MCM(4,60) /1HO,1HS,1H ,1H /D DATA MCM(1,61),MCM(2,61),MCM(3,61),MCM(4,61) /1HO,1HC,1H ,1H /D DATA MCM(1,62),MCM(2,62),MCM(3,62),MCM(4,62) /1HO,1HP,1H ,1H /D DATA MCM(1,63),MCM(2,63),MCM(3,63),MCM(4,63) /1HM,1HI,1HS,1H /D DATA MCM(1,64),MCM(2,64),MCM(3,64),MCM(4,64) /1HM,1HI,1HC,1H /D DATA MCM(1,65),MCM(2,65),MCM(3,65),MCM(4,65) /1HM,1HI,1HP,1H /D DATA MCM(1,66),MCM(2,66),MCM(3,66),MCM(4,66) /1HM,1HI,1HB,1H /D DATA MCM(1,67),MCM(2,67),MCM(3,67),MCM(4,67) /1HM,1HO,1HS,1H /D DATA MCM(1,68),MCM(2,68),MCM(3,68),MCM(4,68) /1HM,1HO,1HC,1H /D DATA MCM(1,69),MCM(2,69),MCM(3,69),MCM(4,69) /1HM,1HO,1HP,1H /D DATA MCM(1,70),MCM(2,70),MCM(3,70),MCM(4,70) /1HS,1HI,1HS,1H /D DATA MCM(1,71),MCM(2,71),MCM(3,71),MCM(4,71) /1HS,1HI,1HC,1H /D DATA MCM(1,72),MCM(2,72),MCM(3,72),MCM(4,72) /1HS,1HI,1HP,1H /D DATA MCM(1,73),MCM(2,73),MCM(3,73),MCM(4,73) /1HS,1HI,1HB,1H /D DATA MCM(1,74),MCM(2,74),MCM(3,74),MCM(4,74) /1HS,1HO,1HS,1H /D DATA MCM(1,75),MCM(2,75),MCM(3,75),MCM(4,75) /1HS,1HO,1HC,1H /D DATA MCM(1,76),MCM(2,76),MCM(3,76),MCM(4,76) /1HS,1HO,1HP,1H /: DATA NELE(1, 1),NELE(2, 1),NEVAL( 1) /1HB,1H , 255/: DATA NELE(1, 2),NELE(2, 2),NEVAL( 2) /1HC,1H , 255/: DATA NELE(1, 3),NELE(2, 3),NEVAL( 3) /1HD,1H , 255/: DATA NELE(1, 4),NELE(2, 4),NEVAL( 4) /1HE,1H , 255/: DATA NELE(1, 5),NELE(2, 5),NEVAL( 5) /1HH,1H , 255/: DATA NELE(1, 6),NELE(2, 6),NEVAL( 6) /1HL,1H , 255/: DATA NELE(1, 7),NELE(2, 7),NEVAL( 7) /1HL,1H , 255/: DATA NELE(1, 8),NELE(2, 8),NEVAL( 8) /1HA,1H , 255/: DATA NELE(1, 9),NELE(2, 9),NEVAL( 9) /1HZ,1H , 1/: DATA NELE(1,10),NELE(2,10),NEVAL(10) /1HC,1HY, 1/: DATA NELE(1,11),NELE(2,11),NEVAL(11) /1HP,1H , 1/: DATA NELE(1,12),NELE(2,12),NEVAL(12) /1HS,1H , 1/: DATA NELE(1,13),NELE(2,13),NEVAL(13) /1HI,1H , 1/: DATA NELE(1,14),NELE(2,14),NEVAL(14) /1HI,1HM, 7/: DATA NELE(1,15),NELE(2,15),NEVAL(15) /1HI,1HE, 1/: DATA NELE(1,16),NELE(2,16),NEVAL(16) /1HI,1H7, 1/: DATA NELE(1,17),NELE(2,17),NEVAL(17) /1HS,1HI, 1/: DATA NELE(1,18),NELE(2,18),NEVAL(18) /1HS,1HO, 1/: DATA NELE(1,19),NELE(2,19),NEVAL(19) /1HC,1HC, 0/: DATA NELE(1,20),NELE(2,20),NEVAL(20) /1HS,1HP, 0/: DATA NELE(1,21),NELE(2,21),NEVAL(21) /1HP,1HC, 0/2 DATA INTX(1),INTX(2),INTX(3),INTX(4),INTX(5) 1 /1HT,1H5,1H6,1H7,1HI/HC C SET NUMBER OF COMMANDS NUMC = 76)(C SET NUMBER OF SET COMMAND ELEMENTS NUELE = 21C READ NEXT COMMANDACN INTIP=0100 CALL INOUT(1)/)C INITIALIZE IMMEDIATE INTERRUPT FLAG2C)1C---> THIS PATCHES AN ERROR BY DELETING LINE #792EC2 IFLG = 0" IF(NDLAY .GT. 0) GO TO 612008C SET INSTRUCTION LIMIT TO ONE AND SET MODE TO TRACE101 NSCNT = 1V ITFLG = 0  MDIR = 0;C SET LIMIT MESSAGE FLAG SO MESSAGE WILL NOT BE PRINTED6 LIMF = 1 ICOL = MCOL+1OC CHECK IF END OF FILE IF(IERR .EQ. 0) GO TO 105M6C HAVE END OF FILE. IF IN READ COMMAND MODE FORCE@C RETURN COMMAND. OTHERWISE, IF IN BATCH MODE EXIT PROGRAM.)C IF INTERACTIVE TRACE 1 INSTRUCTION.D" IF(MREAD .NE. 0) GO TO 63000! IF(IBAT .EQ. 0) GO TO 222002 C OUTPUT END OF FILE MESSAGE GO TO 93500OC CHECK FOR COMMENT"105 IF(IN1 .EQ. IAST ) GO TO 100" IF(IN1 .EQ. ISEMI) GO TO 100C SCAN TO START OF OPERANDSF DO 110 I=1,MCOL+ ICOLS = IF$ IF(IN(I) .EQ. IBLNK) GO TO 120$ IF(IN(I) .EQ. ICTAB) GO TO 120110 CONTINUE GO TO 91000E120 DO 130 I=ICOLS,MCOLF$ IF(IN(I) .EQ. IBLNK) GO TO 130$ IF(IN(I) .NE. ICTAB) GO TO 140 130 CONTINUE I = MCOL+16+C IF BLANK LINE EXECUTE ONE INSTRUCTION " IF(ICOLS .EQ. 1) GO TO 22200140 ICOL = IC CHECK FOR VALID COMMANDF DO 220 IC=1,NUMC DO 210 I=1,4( IF(IN(I) .NE. MCM(I,IC)) GO TO 220$ IF(IN(I) .EQ. IBLNK) GO TO 300$ IF(IN(I) .EQ. ICTAB) GO TO 300210 CONTINUE GO TO 300Q220 CONTINUEC COMMAND NOT VALID  GO TO 91000 C1C PROCESS COMMAND CI@300 GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,> 1 11000,12000,12000,13000,13000,16000,16000,17000,18000,> 2 20000,21000,22000,23000,25000,30000,31000,32000,33000,> 3 40000,41000,42000,42000,43000,43000,44000,46000,46000,> 4 48000,50000,51000,52000,52000,53000,53000,54000,60000,> 5 60000,61000,61000,62000,63000,66000,66500,66600,67000,> 6 70000,71000,72000,73000,74000,75000,76000,70000,71000,> 7 72000,73000,74000,75000,76000,70000,71000,72000,73000, 8 74000,75000,76000),IC0C09C PROCESS INPUT BASE COMMAND *** BASE0C3 1000 N = 00# IF(ICOL .GT. MCOL) GO TO 10102, IF(IN(ICOL) .EQ. IALPH(14)) GO TO 1010 N = 10) IF(IN(ICOL) .NE. ICHRH) GO TO 92000, ICOL1 = ICOL+1) IF(IN(ICOL1) .NE. ICHRS) GO TO 1010 N = 2,1010 INBAS = N, GO TO 100,C08C PROCESS RESET COMMAND *** RESC02000 DO 2010 I=1,18 IARRY(I) = 02010 CONTINUE DO 2020 I=1,3 RARRY(I) = 0.)2020 CONTINUE INTP = 0 GO TO 100 C C 9C SET PROCESSOR TYPE *** TYPEOC13000 I = INBASC INBAS = 0) CALL SCAN  INBAS = IF" IF(IERRF .NE. 0) GO TO 95000 I = 1 # IF(MVAL .EQ. 8080) GO TO 3010) I = 0$ IF(MVAL .NE. 8085) GO TO 920003010 PTYPE = I  GO TO 100 6C LOAD OBJECT MODULE *** LC,4000 NCFLG = 0) GO TO 5020C7C LOAD OBJECT MODULE WITH SYMBOL TABLE *** LSEC 5000 NCFLG = 1 5020 IDEV = IRDR  IFIL = IFILR CALL EQUAT! IF(IERR .NE. 0) GO TO 94000 C READ OBJECT MODULE IORDR = IFIL CALL LOAD8 IF(IERR) 99100,100,99100C7C SET INSTRUCTION LIMIT *** LI C $6000 IF(ICOL .GT. MCOL) GO TO 93000 CALL SCAN " IF(IERRF .EQ. 1) GO TO 95000 LIMIT = IVAL GO TO 100*C6C SET HEADING *** HCC#7000 IF(ICOL .LE. MCOL) GO TO 7100LC NO HEADING IHCTL = -1 GO TO 100FC GET HEADING COUNTU7100 CALL SCAN ! IF(IERR .NE. 1) GO TO 95000J IF(MVAL .NE. 0) GO TO 7200C DISPLAY HEADING NOWR NDISF = 40 CALL DISPL GO TO 100 8C SET HEADING COUNT AND SET TO DISPLAY ON NEXT TRACE7200 IHCTL = MVAL IHVAL = 1F GO TO 100 C99C SET DISPLAY FORMAT *** FORMECN$8000 IF(ICOL .GT. MCOL) GO TO 92000 I = 1F( IF(IN(ICOL) .EQ. NFOR1) GO TO 8100 I = 2H) IF(IN(ICOL) .NE. NFOR2) GO TO 92000N8100 IDFMT = IA GO TO 100FCR6C EXIT SIMULATOR *** XC 9000 RETURNCN7C DISPLAY CPU STATE *** DC0C10000 NDISF = 5  CALL DISPL GO TO 100AC8C DISPLAY INTERRUPT MASK *** DIMC 11000 NDISF = 2O CALL DISPL GO TO 100RC8C DISPLAY INPUT PORT *** DINC 12000 ICFLG = -2 GO TO 13010 C 9C DISPLAY OUTPUT PORT *** DOUTDC 13000 ICFLG = -113010 MAXM = 256.T GO TO 16100 C 7C DISPLAY PROGRAM MEMORY *** DM C 16000 MAXM = MXMEM ICFLG = 20C GET DISPLAY RANGE $16100 IF(ICOL .GT. MCOL) GO TO 93000 NDISF = 3E16200 CALL SCAN  IF(IERRF) 100,16300,95000D$16300 IF(IVAL .GE. MAXM) GO TO 96000 IDFRM = IVAL IDTO = IVAL ! IF(IERR .EQ. 2) GO TO 164002+C HAVE POSSIBLE RANGE, GET NEXT ADDRESS  CALL SCANR! IF(IERRF) 16400,16320,95000$16320 IF(IVAL .GE. MAXM) GO TO 96000$ IF(IVAL .LT. IDTO) GO TO 96000 IDTO = IVAL C DISPLAY MEMORY16400 CALL DISPL.C CHECK FOR ANY REMAINING DISPLAY OPERANDS ICOL = ICOL+1  GO TO 162000C9C DISPLAY SYMBOLS *** DSYM0C517000 ICFLG = 0A INDEX = 0O$ IF(ICOL .GT. MCOL) GO TO 17300 ICFLG = 1FC GET NEXT SYMBOL017020 CALL LABEL! IF(IERR .EQ. 3) GO TO 94500 ! IF(IERR .GE. 2) GO TO 95500,C CHECK TERMINATOR! IF(NERR .EQ. 3) GO TO 97000FC DISPLAY SYMBOL AND VALUE 17100 N = 0A DO 17160 K=1,IWORD ID = MDIV NAME1 = ITAB(K,INDEX)  DO 17160 L=1,ICCNT N = N+1  NN = NAME1/ID IF(NN .GT. 0) GO TO 17120  IPBUF(N) = IBLNK GO TO 17140 17120 NAME1 = NAME1-NN*ID  ID = ID/256G IPBUF(N) = IALPH(NN)!17140 IF(N .GE. MLAB) GO TO 17200L17160 CONTINUEC GET SYMBOL VALUE17200 IVAL = ITABV(INDEX)O NHEXF = 1  INDET = 1 CALL AVHEX? WRITE(IOPRT,17210) (IPBUF(K),K=1,MLAB),(IADDR(1,K),K=1,4) 17210 FORMAT(1X,6A1,2X,4A1) " IF(ICFLG .NE. 0) GO TO 17400C GET NEXT SYMBOL117300 INDEX = INDEX+1& IF(INDEX .LE. NULAB) GO TO 17100 GO TO 100 C CHECK IF ANY MORE SYMBOLS 17400 ICOL = ICOL+1 " IF(ICOL .GT. MCOL) GO TO 100) IF(IN(ICOL) .EQ. IBLNK) GO TO 17400L) IF(IN(ICOL) .EQ. ICTAB) GO TO 17400  GO TO 17020 CL7C DISPLAY HISTORY *** DH CA18000 MVAL = MXHIS$ IF(ICOL .GT. MCOL) GO TO 18100C GET VALUE CALL SCANA" IF(IERRF .EQ. 1) GO TO 95000% IF(MVAL .LE. MXHIS) GO TO 181000 MVAL = MXHIS18100 ICFLG = IHISP-MVAL" IF(ICFLG .GT. 0) GO TO 18110 ICFLG = ICFLG+MXHIS 18110 INDET = 1O NHEXF = 1O DO 18180 I=1,MVAL  ICFLG = ICFLG+1L& IF(ICFLG .LE. MXHIS) GO TO 18120 ICFLG = 1018120 IVAL = IHISB(ICFLG) CALL AVHEX+ WRITE(IOPRT,18121) (IADDR(1,K),K=1,4)818121 FORMAT(1X,4A1)18180 CONTINUE GO TO 100C 6C EXECUTE INSTRUCTIONS *** ECO20000 ITFLG = 1M GO TO 22100TC87C EXECUTE UNTIL ADDRESS *** EA CI21000 ITFLG = 1O GO TO 23100 CC6C TRACE INSTRUCTION *** TC122000 ITFLG = 0 22100 NSCNT = LIMIT  LIMF = 06C SET TRACE OR EXECUTE ADDRESS SO IT HAS NO EFFECT22200 NRADD = -1.A NRCNT = 0R$ IF(ICOL .GT. MCOL) GO TO 24000 C GET NUMBER OF INSTRUCTIONS LIMF = 1 CALL SCANX NSCNT = IVAL ICOL = MCOL+1*" IF(IERR-1) 24000,24000,95000C 7C TRACE UNTIL ADDRESS *** TA C*23000 ITFLG = 0 23100 NRCNT = 1  LIMF = 0 NSCNT = LIMITTC GET ADDRESS $ IF(ICOL .GT. MCOL) GO TO 93000 CALL SCANI" IF(IERRF .EQ. 1) GO TO 95000 ICOL = ICOL+1  NRADD = IVAL& IF(NRADD .GE. MXMEM) GO TO 91500&C CHECK IF ADDRESS COUNT SPECIFIED CALL SCANT ICOL = MCOL+1=! IF(IERRF) 24000,23200,95000 23200 NRCNT = MVALC+=C SIMULATE INSTRUCTION ************DCS24000 ICFLG = 0  IRAD = 0 CALL SIMU C GET HISTORY ADDRESS  IHISP = IHISP+1 & IF(IHISP .LE. MXHIS) GO TO 24020 IHISP = 1O24020 IHISB(IHISP) = IARC UPDATE PROGRAM COUNTER IPC = IPCS" IF(IPCS .GE. 0.) GO TO 24120 IPC = IARE" IF(INTIP .NE. 0) GO TO 24120 REAL1 = IBYTE  IPC = IAR+REAL1C24120 INTIP = 0 $ IF(IPC .GE. MXMEM) GO TO 91500 NDISF = 1C UPDATE CYCLE COUNT REAL1 = ICYC+ICYCD ICYCT = ICYCT+REAL1  IF (ICYCT.LT.10000) GOTO 24220S ICYCT = ICYCT - 10000"24220 IF(MHALT .EQ. 2) GO TO 63000" IF(MHALT .EQ. 4) GO TO 24230" IF(MHALT .GT. 0) GO TO 24900$C RESET INTERUPT RECOGNIZED FLAG24230 INTRR = 0S!C CHECK FOR INTERRUPT PENDING0! IF(INTP .NE. 0) GO TO 24240.*C CHECK FOR INTERRUPT COUNT AND UPDATE" IF(INTCY .LT. 0) GO TO 24500 INTCY = INTCY-ICYC-ICYCD" IF(INTCY .GT. 0) GO TO 24500 INTP = 2**(INTTP-2)L)C CHECK INTERRUPT TYPE AND ENABLE BIT"24240 IF(INTTP .EQ. 1) GO TO 24250! IF(INTE .EQ. 0) GO TO 24495T&C CHECK FOR REGULAR 8080 INTERRUPT" IF(INTTP .EQ. 5) GO TO 242505C CHECK INTERRUPT MASK BIT FOR RESTART INTERRUPTS I = IMASK/(2**(INTTP-2)) I = I-(I/2)*2 IF(I .EQ. 1) GO TO 24495%C CHECK FOR RESTART 7.5 INTERRUPT " IF(INTTP .NE. 4) GO TO 24250" IF(INT75 .NE. 0) GO TO 24495#C INTERRUPT RECOGNIZED, PROCESS024250 INTCY = -1I MESSN = 24 CALL MESSE MHALT = 0 INTE = 0" IF(INTTP .NE. 5) GO TO 24400#C PROCESS 8080 NORMAL INTERRUPTE INTRR = 1U INTIP = 1P GO TO 244900)C PROCESS TRAP AND RESTART INTERRUPTST24400 ICYCT = ICYCT+13.M"C SAVE RETURN ADDRESS ON STACK ICFLG = 1. CALL SIMU5 IPC = 36+8*(INTTP-1)" IF(INTTP .NE. 4) GO TO 24490C SET RESTART 7.5 FLIP FLOP  INT75 = 1 24490 INTP = 0!24495 IF(IFLG .EQ. 0) GO TO 24500- IFLG = 0 GO TO 100M)C CHECK FOR SIMULATION HALT CONDITION "24500 IF(MHALT .NE. 0) GO TO 24900(C CHECK IF INSTRUCTION LIMIT REACHED NSCNT = NSCNT-1.# IF(NSCNT .GT. 0.) GO TO 24520 ! IF(LIMF .GT. 0) GO TO 24900 #C DISPLAY LIMIT REACHED MESSAGE  MESSN = 12 CALL MESS GO TO 24900 "24520 IF(ITFLG .NE. 1) GO TO 245407C IN EXECUTE MODE, CHECK TRACE AND BREAKPOINT FLAGS * IF((NBRKF+MBFLG) .EQ. 2) GO TO 24900* IF((NTRAF+MTFLG) .LT. 2) GO TO 24560(C IN TRACE MODE, DISPLAY INSTRUCTION24540 CALL DISPL NDISF = 0.(C CHECK IF BREAKPOINT FOR TB COMMAND0 IF((NBRKF+MBFLG+ITFLG) .EQ. 4) GO TO 24950&C CHECK FOR ADDRESS STOP AND COUNT!24560 IF(IRAD .EQ. 0) GO TO 24000I NRCNT = NRCNT-1S" IF(NRCNT .GT. 0) GO TO 240002C DISPLAY RESULT FOR LIMIT AND HALT CONDITIONS"24900 IF(NDISF .EQ. 0) GO TO 24950 CALL DISPL"24950 IF(MHALT .EQ. 3) GO TO 99100 MHALT = 09 GO TO 100ACT7C TRACE TILL BREAKPOINT *** TBSCC25000 ITFLG = 2D GO TO 22100 C7C SET BREAKPOINT *** BP+CL30000 MDIR = 3 GO TO 31100 CC8C CLEAR BREAKPOINT *** NBPC031000 MDIR = 2C SET BIT POSITION31100 ICFLG = 22 GO TO 39000 CU7C SET TRACE FLAG *** TRGCO32000 MDIR = 3 GO TO 33100MCT8C CLEAR TRACE FLAG *** NTRC33000 MDIR = 233100 ICFLG = 1 C &C SET OR CLEAR FLAG OR MASTER FLAGC $39000 IF(ICOL .LE. MCOL) GO TO 39100C SET MASTER FLAG " IF(ICFLG .LT. 4) GO TO 39010 ICFLG = 3039010 MSFLG(ICFLG) = MDIR-2T GO TO 100 C GET OPERAND ADDRESSESD39100 CALL SCAN  IF(IERRF) 100,39200,95000 39200 IDFRM = IVAL IDTO = IDFRM% IF(IVAL .GT. MXMEM) GO TO 96000! IF(IERR .EQ. 2) GO TO 393000+C HAVE POSSIBLE RANGE, GET NEXT ADDRESS  CALL SCANR! IF(IERRF) 39300,39220,95000 %39220 IF(IVAL .GE. MXMEM) GO TO 96000E IDTO = IVALF% IF(IDTO .LT. IDFRM) GO TO 96000 C SET OR CLEAR FLAGF39300 IADD = IDFRM39310 CALL MEMRW IADD = IADD+1.$ IF(IADD .LE. IDTO) GO TO 39310 ICOL = ICOL+1 GO TO 39100 C 8C PROTECT MEMORY *** PROCI40000 MDIR = 3 GO TO 41110TC69C UNPROTECT MEMORY *** NPROLCA41000 MDIR = 241110 ICFLG = 4L GO TO 39000RC 8C SET INPUT PORT *** SINC 42000 ICFLG = -2 GO TO 43100ICM9C SET OUTPUT PORT *** SOUTMC943000 ICFLG = -143100 MAXM = 256. GO TO 45000IC)7C SET PROGRAM MEMORY *** SM C 44000 ICFLG = 0Y MAXM = MXMEMC GET STARTING ADDRESS$45000 IF(ICOL .GT. MCOL) GO TO 93000 CALL SCANY! IF(IERR .GT. 2) GO TO 95000L ICOL = ICOL+1 ISTO = IVAL  NN = IERR45100 ISTO = ISTO+1.C GET DATA BYTE  CALL SCAN! IF(IERRF) 45600,45200,95000345200 ICOL = ICOL+1U$ IF(ISTO .GT. MAXM) GO TO 91500 NN = IERR0# IF(MVAL .GT. 256) GO TO 96000 C SET VALUE)" IF(ICFLG .GE. 0) GO TO 45500 C SET I/O* ITEM1 = ISTO! ITEM1 = (ICFLG+2)*256+ITEM1  ITEM2 = IOTAB(ITEM1)/256# IOTAB(ITEM1) = ITEM2*256+MVALL GO TO 45100RC SET PROGRAM MEMORY45500 IMEM = MVAL IADD = ISTO-1. MDIR = 1 CALL MEMRW GO TO 45100B'C CHECK IF ADDITIONAL LINES TO READ545600 IF(NN .EQ. 1) GO TO 100I-C READ ANOTHER LINE AND PUT OUT DATA BYTE 45620 ISTO = ISTO-1.$ IF(ISTO .GE. MAXM) GO TO 91500 IDFRM = ISTO IDTO = ISTOO NDISF = 6 "C OUTPUT ADDRESS AND DATA BYTE CALL DISPLC READ NEXT LINE CALL INOUT(4)  IF(IERR .EQ. 1) GO TO 100 ICOL = 1 NN = 1$ IF(IN1 .NE. ICOMM) GO TO 45100 ISTO = ISTO+2. GO TO 45620 CL8C PROCESS SET ELEMENT COMMAND *** SETCO$46000 IF(ICOL .GT. MCOL) GO TO 93000C GET NEXT ELEMENT)46100 IF(IN(ICOL) .EQ. IBLNK) GO TO 46110-) IF(IN(ICOL) .NE. ICTAB) GO TO 46120 46110 ICOL = ICOL+1 # IF(ICOL-MCOL) 46100,46100,100 46120 ICOLS = ICOL-1C FIND END OF ELEMENT46140 ICOL = ICOL+1$ IF(ICOL .GT. MCOL) GO TO 93000) IF(IN(ICOL) .EQ. IBLNK) GO TO 46200=) IF(IN(ICOL) .EQ. ICTAB) GO TO 46200 ) IF(IN(ICOL) .NE. IEQUL) GO TO 46140C CHECK IF VALID ELEMENT46200 NN = ICOL-ICOLS-1T IF(NN-2) 46210,46210,9250046210 DO 46240 INDX = 1,NUELET DO 46220 K=1,NN. ITEM1 = ICOLS+K 1 IF(IN(ITEM1) .NE. NELE(K,INDX)) GO TO 46240L46220 CONTINUE IF(NN .EQ. 2) GO TO 46300. IF(NELE(2,INDX)-IBLNK) 46240,46300,4624046240 CONTINUE GO TO 92500OC GET VALUEO46300 ICOL = ICOL+1C CALL SCANO" IF(IERRF .NE. 0) GO TO 95000 ICOL = ICOL+1  ITEM1 = NEVAL(INDX) " IF(ITEM1 .EQ. 0) GO TO 46360C SET INTEGER VARIABLE% IF(MVAL .GT. ITEM1) GO TO 96000 IARRY(INDX) = MVAL GO TO 461000C SET REAL VARIABLES46360 INDX = INDX-18 RARRY(INDX) = IVAL GO TO 46100OCN9C SET SYMBOL *** SSYM-CN$48000 IF(ICOL .GT. MCOL) GO TO 93000C GET NEXT SYMBOL 48020 NUML = NULAB CALL LABEL INDET = INDEX / GO TO(48100,48040,94500,94500,96500),IERR %48040 IF(NULAB .GE. LTAB) GO TO 96500I NUML = NUML+13 INDET = NUMLC PUT SYMBOL INTO TABLE. DO 48060 K=1,IWORD ITAB(K,INDET) = NAME(K)T48060 CONTINUE"48100 IF(NERR-2) 48140,97000,48120&48120 IF(ICHAR .NE. IEQUL) GO TO 97000C GET SYMBOL VALUE48140 ICOL = ICOL+1  CALL SCAN " IF(IERRF .NE. 0) GO TO 95000 ITABV(INDET) = IVAL  NULAB = NUMLC CHECK IF ANY MORE SYMBOLS 48200 ICOL = ICOL+1 " IF(ICOL .GT. MCOL) GO TO 100) IF(IN(ICOL) .EQ. IBLNK) GO TO 48200 ) IF(IN(ICOL) .NE. ICTAB) GO TO 48020  GO TO 48200BCI8C PROCESS INTERRUPT COMMAND *** INTCA50000 INTCY = -1 INTP = 0$ IF(ICOL .GT. MCOL) GO TO 93000C CHECK FOR INTERRUPT TYPE DO 50005 I=1,5+ IF(IN(ICOL) .EQ. INTX(I)) GO TO 50010F50005 CONTINUE GO TO 92000T50010 INTTP = I  ICOL = ICOL+1) IF(IN(ICOL) .EQ. IBLNK) GO TO 50020L) IF(IN(ICOL) .NE. ICTAB) GO TO 920001C READ AND SET CYCLE COUNT50020 CALL SCAN  KVAL = MVAL.! IF(IERR .NE. 1) GO TO 920008) IF(IN(ICOL) .EQ. IBLNK) GO TO 50030 ) IF(IN(ICOL) .NE. ICTAB) GO TO 920001%C READ INSTRUCTION TO BE EXECUTEDO50030 DO 50050 I=1,3 CALL SCANP" IF(IERRF .LT. 0) GO TO 50060! IF(IERR .NE. 1) GO TO 920001$ IF(IVAL .GE. 256.) GO TO 92000 INTRG(I) = MVAL 50050 CONTINUE50060 INTCY = KVAL IF(INTCY .NE. 0) GO TO 100 IFLG = 1 INTCY = 01 GO TO 24240TCC9C RESET INTERRUPT CYCLE COUNT *** NINTRCN51000 INTCY = -1 INTP = 0 GO TO 100OC 7C FILL INPUT PORT *** FI CD52000 ICFLG = -2 GO TO 53100OC07C FILL OUTPUT PORT *** FO5C053000 ICFLG = -153100 MAXM = 256. GO TO 550002C)7C FILL PROGRAM MEMORY *** FM6CN54000 ICFLG = 2  MAXM = MXMEMC GET STARTING ADDRESS$55000 IF(ICOL .GT. MCOL) GO TO 93000 MDIR = 155100 CALL SCAN  IF(IERRF) 100,55120,950000!55120 IF(IERR .NE. 1) GO TO 97000 $ IF(IVAL .GE. MAXM) GO TO 96000 IDFRM = IVALC GET FINAL ADDRESS  ICOL = ICOL+1T CALL SCAN ! IF(IERR .NE. 1) GO TO 95000  IDTO = IVAL0$ IF(IDTO .GT. MAXM) GO TO 96000% IF(IDTO .LT. IDFRM) GO TO 96000OC GET FILL VALUE ICOL = ICOL+1 CALL SCAN " IF(IERRF .NE. 0) GO TO 95000 ICOL = ICOL+1 # IF(MVAL .GE. 256) GO TO 96000 !55200 IF(ICFLG) 55220,55500,55500F C SET I/O255220 ITEM1 = IDFRMR# ITEM1 = (ICFLG+2)*256+ITEM1+1 0 IOTAB(ITEM1) = MVAL+(IOTAB(ITEM1)/256)*256 GO TO 55600C SET PROGRAM MEMORY55500 IMEM = MVAL  IADD = IDFRM CALL MEMRW55600 IDFRM = IDFRM+1.& IF(IDFRM-IDTO) 55200,55200,55100C.9C READ COMMANDS *** R,RDOC 60000 NN = 0 GO TO 61100FCE;C READ COMMANDS AND ECHO *** RE,RED6CO 61000 NN = 161100 IDEV = ISCRD IFIL = IFILC CALL EQUAT! IF(IERR .NE. 0) GO TO 940002 NDLAY = 1  K = 2+NN IERR = 100$ IF(IN(K) .NE. IBLNK) GO TO 10061200 IECHO = NN NDLAY = 0M IOCRD = IFIL MREAD = 1M IF(IERR-100) 101,100,100C 6C WRITE OUTPUT *** WC 62000 IDEV = ISPRT IFIL = IFILP CALL EQUAT! IF(IERR .NE. 0) GO TO 94000M IOPRT = IDEV GO TO 100*C,8C RETURN FROM READ MODE *** RETCC63000 MREAD = 0T IOCRD = ISCRD0 IECHO = 0  IF(IBAT .EQ. 0) GO TO 100  IECHO = 1  GO TO 100 CN8C DELETE SYMBOLS *** DELC $66000 IF(ICOL .LE. MCOL) GO TO 66100C DELETE ALL SYMBOLS NULAB = 0  GO TO 100 C GET NEXT SYMBOL2"66100 IF(ICOL .GT. MCOL) GO TO 100) IF(IN(ICOL) .EQ. IBLNK) GO TO 66120O) IF(IN(ICOL) .NE. ICTAB) GO TO 66200 66120 ICOL = ICOL+1N GO TO 66100 66200 CALL LABEL" IF(NERR-3) 66220,97000,94500/66220 GO TO(66300,66120,94500,66120,66120),IERRE&66300 IF(INDEX .GE. NULAB) GO TO 66380 NU1 = NULAB-1  DO 66340 I=INDEX,NU1 I1 = I+1 DO 66320 K=1,IWORD ITAB(K,I) = ITAB(K,I1)66320 CONTINUE ITABV(I) = ITABV(I1)66340 CONTINUE66380 NULAB = NULAB-16 GO TO 66120OCG9C FILL MEMORY DATA BUFFER *** MDAT CI66500 CVAL = 65536.O BVAL = 0.  GO TO 67010 CO9C FILL SERIAL DATA BUFFER *** SDAT9C066600 PORTN = 65792. GO TO 670102CI9C FILL INPUT DATA BUFFER *** DATAUC-67000 CVAL = 256.I BVAL = 65536.=$67010 IF(ICOL .LE. MCOL) GO TO 67100C RE-INITIALIZE DATA TABLE DO 67020 I=1,8 RDATP(I) = -1. IDATP(I) = -1 67020 CONTINUE NDATA = 0 GO TO 100 C CHECK ARGUMENT(67100 IF(IN(ICOL) .NE. IAST) GO TO 67200C RESET ALL POINTERS DO 67140 I=1,8% IF(IDATP(I) .LT. 0) GO TO 67140  IDATP(I) = 067140 CONTINUE GO TO 100TC GET PORT NUMBERL 67200 IF(IC .NE. 54) GO TO 67205 ICOL = ICOL-17 GO TO 67208 67205 CALL SCAN=" IF(IERRF .NE. 0) GO TO 95000$ IF(IVAL .GE. CVAL) GO TO 96000 PORTN = IVAL+BVAL C SEE IF PORT IS IN TABLE=67208 DO 67210 IP=1,8 * IF(RDATP(IP) .EQ. PORTN) GO TO 6721567210 CONTINUE IP = 0$C CHECK FOR ADDITIONAL ARGUMENTS67215 ICOL = ICOL+16 CALL SCAN ! IF(IERRF) 67220,67300,95000 C RESET PORT POINTER67220 IF(IP .EQ. 0) GO TO 100  IDATP(IP) = 00 GO TO 100G67300 IF(IP .NE. 0) GO TO 67310%C NEW PORT, ENTER NUMBER IN TABLE " IF(NPORT .GE. 8) GO TO 97500 NPORT = NPORT+1G IP = NPORT IDATP(IP) = 0  RDATP(IP) = PORTNLC GET PORT DATA=67310 K = NDATAA#67320 IF(MVAL .GE. 256) GO TO 96000 C CHECK FOR SERIAL PORT DATA IF(IC .NE. 54) GO TO 67330! IF(MVAL .GT. 1) GO TO 96000 67330 K = K+17" IF(K .GT. MDTAB) GO TO 97500 IDATT(K) = MVAL+256*IP ICOL = ICOL+1( CALL SCANO! IF(IERRF) 67400,67320,95000 67400 NDATA = K  GO TO 100RC 7C INPUT PORT FOR STANDARD DEVICE *** IS 8C *** MIS8C *** SISC270000 IPFLG = 16 GO TO 73100 CH7C INPUT PORT FROM CURRENT DEVICE *** IC08C *** MIC8C *** SICC71000 IPFLG = 2+ GO TO 73100OC 7C PRESET INPUT PORT *** IP 8C *** MIP8C *** SIPC 72000 IPFLG = 0  GO TO 73100 C 7C INPUT PORT FROM DATA BUFFER *** IBO8C *** MIB8C *** SIBC 73000 IPFLG = 3 73100 ITFLG = 0  GO TO 76200 C 7C OUTPUT PORT TO STANDARD DEVICE *** OS 8C *** MOS8C *** SOSC 74000 IPFLG = 1  GO TO 76100 C 7C OUTPUT PORT TO CURRENT DEVICE *** OC 8C *** MOC8C *** SOCC 75000 IPFLG = 2  GO TO 76100 C 7C OUTPUT TO PORT ONLY *** OPO8C *** MOP8C *** SOPC 76000 IPFLG = 0 76100 ITFLG = 1 76200 IF(IC .GE. 70) GO TO 77900%C SET CHECK VALUE FOR PORT NUMBER  CVAL = 256.P IF(IC .LT. 63) GO TO 77000 CVAL = MXMEMC GET PORT NUMBERS$77000 IF(ICOL .GT. MCOL) GO TO 9300077020 CALL SCAN  IF(IERRF) 100,77100,950000$77100 IF(IVAL .GE. CVAL) GO TO 96000 IDFRM = IVAL+1.L IDTO = IDFRM! IF(IERR .EQ. 2) GO TO 77200 C POSSIBLE RANGE CALL SCAN ! IF(IERRF) 77200,77120,95000 $77120 IF(IVAL .GE. CVAL) GO TO 96000 IDTO = IVAL+1.% IF(IDTO .LT. IDFRM) GO TO 96000E4C SET PORT TYPE FOR ALL PORTS FROM IDFRM TO IDTOC CHECK FOR MEMORY IO0 77200 IF(IC .GE. 63) GO TO 77500C SET PORT IO PORT TYPEG I = IDFRM0*C SET PORT VALUE INTO IO CONTROL ARRAY J = I+ITFLG*256A6 IOTAB(J) = IOTAB(J)-(IOTAB(J)/256)*256+IPFLG*256 GO TO 77800 &C SET PORT VALUE INTO MEMORY ARRAY77500 IADD = IDFRM-1.S MDIR = 3 ICFLG = 8+24*ITFLG CALL MEMRW77800 IDFRM = IDFRM+1.% IF(IDFRM .LE. IDTO) GO TO 77200F ICOL = ICOL+1  GO TO 77020 %C SET CONTROL WORD FOR SERIAL I/OC"77900 IF(ITFLG .EQ. 0) GO TO 77910' SERCT = SERCT-(SERCT/4)*4+IPFLG*4P GO TO 100R77910 SERCT = (SERCT/4)*4+IPFLGC GO TO 100 C C+C OUTPUT SIMULATOR MESSAGESBC-C INVALID COMMANDG91000 MESSN = 10 GO TO 99000OC ADDRESS TOO LARGEY91500 MESSN = 11 GO TO 99000=C INVALID OPERANDI92000 MESSN = 18 GO TO 99000 C INVALID ELEMENTM92500 MESSN = 19 GO TO 99000=C MISSING OPERAND793000 MESSN = 4O GO TO 99000AC END OF FILE ENCOUNTEREDG93500 MESSN = 8  GO TO 99000TC EQUAT ROUTINE ERRORS!94000 IF(IERR .EQ. 2) GO TO 92000L MESSN = 14 GO TO 99000UC SYMBOL ERROR94500 MESSN = 5N GO TO 990000!C SCAN ROUTINE ERROR MESSAGES !95000 IF(IERR .LE. 3) GO TO 97000  MESSN = IERR-3 GO TO 99000PC UNDEFINED SYMBOL95500 MESSN = 20 GO TO 99000LC VALUE OUT OF RANGE96000 MESSN = 6= GO TO 99000RC SYMBOL TABLE ERROR96500 MESSN = 9 GO TO 99000NC TERMINATOR ERROR97000 MESSN = 16 GO TO 99000 C DATA TABLE ERROR97500 MESSN = 21C2CL99000 CALL MESS4C "C RESTORE I/O DEVICES IF ERRORC499100 IOPRT = ISPRT  IOCRD = ISCRDC IECHO = 0M MREAD = 0F IF(IBAT .EQ. 0) GO TO 100 RETURN ENDT SUBROUTINE SIMUECYCLCC THIS ROUTINE PERFORMS THE ACTUAL SIMULATION OF AN INSTRUCTION0@C FOR THE 8080/8085 MICROPROCESSOR. A SINGLE INSTRUCTION IS-C EXECUTED FOR EACH CALL TO THIS ROUTINE.RCRC REAL IPC1 INTEGER FF(5) 2 DIMENSION IS1(256),IS2(256),IREG(14),IOPX(2)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILT@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)S; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ. EQUIVALENCE (FF(1),ZERO),(IREG(1),IREGB) EQUIVALENCE (IOP2,IOPX(1))H DATA IS1( 1),IS2( 1),IS1( 2),IS2( 2) /11540, 132,10892, 330/H DATA IS1( 3),IS2( 3),IS1( 4),IS2( 4) /18756, 1255, 7492, 166/H DATA IS1( 5),IS2( 5),IS1( 6),IS2( 6) / 7204, 164, 5668, 164/H DATA IS1( 7),IS2( 7),IS1( 8),IS2( 8) /11384, 231,14612, 132/H DATA IS1( 9),IS2( 9),IS1( 10),IS2( 10) /20756, 0, 5444, 330/H DATA IS1( 11),IS2( 11),IS1( 12),IS2( 12) /10310, 1255, 5956, 166/H DATA IS1( 13),IS2( 13),IS1( 14),IS2( 14) / 7204, 164, 5668, 164/H DATA IS1( 15),IS2( 15),IS1( 16),IS2( 16) /11384, 231,16404, 132/H DATA IS1( 17),IS2( 17),IS1( 18),IS2( 18) /20756, 0,10892, 330/H DATA IS1( 19),IS2( 19),IS1( 20),IS2( 20) /18756, 1255, 7492, 166/H DATA IS1( 21),IS2( 21),IS1( 22),IS2( 22) / 7204, 164, 5668, 164/H DATA IS1( 23),IS2( 23),IS1( 24),IS2( 24) /11384, 231,13332, 132/H DATA IS1( 25),IS2( 25),IS1( 26),IS2( 26) /20756, 0, 5444, 330/H DATA IS1( 27),IS2( 27),IS1( 28),IS2( 28) /10310, 1255, 5956, 166/H DATA IS1( 29),IS2( 29),IS1( 30),IS2( 30) / 7204, 164, 5668, 164/H DATA IS1( 31),IS2( 31),IS1( 32),IS2( 32) /11384, 231,13588, 132/H DATA IS1( 33),IS2( 33),IS1( 34),IS2( 34) /14356, 4,10892, 330/H DATA IS1( 35),IS2( 35),IS1( 36),IS2( 36) /17772, 1552, 7492, 166/H DATA IS1( 37),IS2( 37),IS1( 38),IS2( 38) / 7204, 164, 5668, 164/H DATA IS1( 39),IS2( 39),IS1( 40),IS2( 40) /11384, 231, 5140, 132/H DATA IS1( 41),IS2( 41),IS1( 42),IS2( 42) /20756, 0, 5444, 330/H DATA IS1( 43),IS2( 43),IS1( 44),IS2( 44) /10606, 1552, 5956, 166/H DATA IS1( 45),IS2( 45),IS1( 46),IS2( 46) / 7204, 164, 5668, 164/H DATA IS1( 47),IS2( 47),IS1( 48),IS2( 48) /11384, 231, 2580, 132/H DATA IS1( 49),IS2( 49),IS1( 50),IS2( 50) /17940, 4,10940, 330/H DATA IS1( 51),IS2( 51),IS1( 52),IS2( 52) /18540, 1453, 7588, 166/H DATA IS1( 53),IS2( 53),IS1( 54),IS2( 54) / 7207, 1354, 5671, 1354/H DATA IS1( 55),IS2( 55),IS1( 56),IS2( 56) /11385, 1354,18964, 132/H DATA IS1( 57),IS2( 57),IS1( 58),IS2( 58) /20756, 0, 5540, 330/H DATA IS1( 59),IS2( 59),IS1( 60),IS2( 60) /10094, 1453, 6052, 166/H DATA IS1( 61),IS2( 61),IS1( 62),IS2( 62) / 7204, 164, 5668, 164/H DATA IS1( 63),IS2( 63),IS1( 64),IS2( 64) /11384, 231, 2836, 132/H DATA IS1( 65),IS2( 65),IS1( 66),IS2( 66) /11156, 164,11156, 164/H DATA IS1( 67),IS2( 67),IS1( 68),IS2( 68) /11156, 164,11156, 164/H DATA IS1( 69),IS2( 69),IS1( 70),IS2( 70) /11156, 164,11156, 164/H DATA IS1( 71),IS2( 71),IS1( 72),IS2( 72) /11159, 1255,11156, 164/H DATA IS1( 73),IS2( 73),IS1( 74),IS2( 74) /11156, 164,11156, 164/H DATA IS1( 75),IS2( 75),IS1( 76),IS2( 76) /11156, 164,11156, 164/H DATA IS1( 77),IS2( 77),IS1( 78),IS2( 78) /11156, 164,11156, 164/H DATA IS1( 79),IS2( 79),IS1( 80),IS2( 80) /11159, 1255,11156, 164/H DATA IS1( 81),IS2( 81),IS1( 82),IS2( 82) /11156, 164,11156, 164/H DATA IS1( 83),IS2( 83),IS1( 84),IS2( 84) /11156, 164,11156, 164/H DATA IS1( 85),IS2( 85),IS1( 86),IS2( 86) /11156, 164,11156, 164/H DATA IS1( 87),IS2( 87),IS1( 88),IS2( 88) /11159, 1255,11156, 164/H DATA IS1( 89),IS2( 89),IS1( 90),IS2( 90) /11156, 164,11156, 164/H DATA IS1( 91),IS2( 91),IS1( 92),IS2( 92) /11156, 164,11156, 164/H DATA IS1( 93),IS2( 93),IS1( 94),IS2( 94) /11156, 164,11156, 164/H DATA IS1( 95),IS2( 95),IS1( 96),IS2( 96) /11159, 1255,11156, 164/H DATA IS1( 97),IS2( 97),IS1( 98),IS2( 98) /11156, 164,11156, 164/H DATA IS1( 99),IS2( 99),IS1(100),IS2(100) /11156, 164,11156, 164/H DATA IS1(101),IS2(101),IS1(102),IS2(102) /11156, 164,11156, 164/H DATA IS1(103),IS2(103),IS1(104),IS2(104) /11159, 1255,11156, 164/H DATA IS1(105),IS2(105),IS1(106),IS2(106) /11156, 164,11156, 164/H DATA IS1(107),IS2(107),IS1(108),IS2(108) /11156, 164,11156, 164/H DATA IS1(109),IS2(109),IS1(110),IS2(110) /11156, 164,11156, 164/H DATA IS1(111),IS2(111),IS1(112),IS2(112) /11159, 1255,11156, 164/H DATA IS1(113),IS2(113),IS1(114),IS2(114) /11157, 1255,11157, 1255/H DATA IS1(115),IS2(115),IS1(116),IS2(116) /11157, 1255,11157, 1255/H DATA IS1(117),IS2(117),IS1(118),IS2(118) /11157, 1255,11157, 1255/H DATA IS1(119),IS2(119),IS1(120),IS2(120) / 6676, 229,11157, 1255/H DATA IS1(121),IS2(121),IS1(122),IS2(122) /11156, 164,11156, 164/H DATA IS1(123),IS2(123),IS1(124),IS2(124) /11156, 164,11156, 164/H DATA IS1(125),IS2(125),IS1(126),IS2(126) /11156, 164,11156, 164/H DATA IS1(127),IS2(127),IS1(128),IS2(128) /11159, 1255,11156, 164/H DATA IS1(129),IS2(129),IS1(130),IS2(130) / 820, 132, 820, 132/H DATA IS1(131),IS2(131),IS1(132),IS2(132) / 820, 132, 820, 132/: DATA IS1(133),IS2(133),IS1(134),IS2(134)/820,132,820,132/H DATA IS1(135),IS2(135),IS1(136),IS2(136) / 823, 1255, 820, 132/H DATA IS1(137),IS2(137),IS1(138),IS2(138) / 564, 132, 564, 132/H DATA IS1(139),IS2(139),IS1(140),IS2(140) / 564, 132, 564, 132/H DATA IS1(141),IS2(141),IS1(142),IS2(142) / 564, 132, 564, 132/H DATA IS1(143),IS2(143),IS1(144),IS2(144) / 567, 1255, 564, 132/H DATA IS1(145),IS2(145),IS1(146),IS2(146) /19252, 132,19252, 132/H DATA IS1(147),IS2(147),IS1(148),IS2(148) /19252, 132,19252, 132/H DATA IS1(149),IS2(149),IS1(150),IS2(150) /19252, 132,19252, 132/H DATA IS1(151),IS2(151),IS1(152),IS2(152) /19255, 1255,19252, 132/H DATA IS1(153),IS2(153),IS1(154),IS2(154) /17204, 132,17204, 132/H DATA IS1(155),IS2(155),IS1(156),IS2(156) /17204, 132,17204, 132/H DATA IS1(157),IS2(157),IS1(158),IS2(158) /17204, 132,17204, 132/H DATA IS1(159),IS2(159),IS1(160),IS2(160) /17207, 1255,17204, 132/H DATA IS1(161),IS2(161),IS1(162),IS2(162) / 1332, 132, 1332, 132/H DATA IS1(163),IS2(163),IS1(164),IS2(164) / 1332, 132, 1332, 132/H DATA IS1(165),IS2(165),IS1(166),IS2(166) / 1332, 132, 1332, 132/H DATA IS1(167),IS2(167),IS1(168),IS2(168) / 1335, 1255, 1332, 132/H DATA IS1(169),IS2(169),IS1(170),IS2(170) /20020, 132,20020, 132/H DATA IS1(171),IS2(171),IS1(172),IS2(172) /20020, 132,20020, 132/H DATA IS1(173),IS2(173),IS1(174),IS2(174) /20020, 132,20020, 132/H DATA IS1(175),IS2(175),IS1(176),IS2(176) /20023, 1255,20020, 132/H DATA IS1(177),IS2(177),IS1(178),IS2(178) /11828, 132,11828, 132/H DATA IS1(179),IS2(179),IS1(180),IS2(180) /11828, 132,11828, 132/H DATA IS1(181),IS2(181),IS1(182),IS2(182) /11828, 132,11828, 132/H DATA IS1(183),IS2(183),IS1(184),IS2(184) /11831, 1255,11828, 132/H DATA IS1(185),IS2(185),IS1(186),IS2(186) / 3124, 132, 3124, 132/H DATA IS1(187),IS2(187),IS1(188),IS2(188) / 3124, 132, 3124, 132/H DATA IS1(189),IS2(189),IS1(190),IS2(190) / 3124, 132, 3124, 132/H DATA IS1(191),IS2(191),IS1(192),IS2(192) / 3127, 1255, 3124, 132/H DATA IS1(193),IS2(193),IS1(194),IS2(194) /15380, 166,12868, 1354/H DATA IS1(195),IS2(195),IS1(196),IS2(196) / 8812, 327, 8300, 327/H DATA IS1(197),IS2(197),IS1(198),IS2(198) / 3692, 361,13124, 1388/H DATA IS1(199),IS2(199),IS1(200),IS2(200) / 1112, 231,16724, 364/H DATA IS1(201),IS2(201),IS1(202),IS2(202) /16916, 166,14100, 330/H DATA IS1(203),IS2(203),IS1(204),IS2(204) / 9836, 327,20756, 0/H DATA IS1(205),IS2(205),IS1(206),IS2(206) / 4972, 361, 1900, 361/H DATA IS1(207),IS2(207),IS1(208),IS2(208) / 344, 231,16724, 364/H DATA IS1(209),IS2(209),IS1(210),IS2(210) /15124, 166,12868, 1354/H DATA IS1(211),IS2(211),IS1(212),IS2(212) / 8556, 327,12376, 330/H DATA IS1(213),IS2(213),IS1(214),IS2(214) / 3436, 361,13124, 1388/H DATA IS1(215),IS2(215),IS1(216),IS2(216) /19544, 231,16724, 364/H DATA IS1(217),IS2(217),IS1(218),IS2(218) /13844, 166,20756, 0/H DATA IS1(219),IS2(219),IS1(220),IS2(220) / 7788, 327, 7000, 330/H DATA IS1(221),IS2(221),IS1(222),IS2(222) / 2156, 361,20756, 0/H DATA IS1(223),IS2(223),IS1(224),IS2(224) /17496, 231,16724, 364/H DATA IS1(225),IS2(225),IS1(226),IS2(226) /16148, 166,12868, 1354/H DATA IS1(227),IS2(227),IS1(228),IS2(228) / 9580, 327,20500, 1616/H DATA IS1(229),IS2(229),IS1(230),IS2(230) / 4716, 361,13124, 1388/H DATA IS1(231),IS2(231),IS1(232),IS2(232) / 1624, 231,16724, 364/H DATA IS1(233),IS2(233),IS1(234),IS2(234) /15892, 166,12565, 166/H DATA IS1(235),IS2(235),IS1(236),IS2(236) / 9324, 327,19732, 136/H DATA IS1(237),IS2(237),IS1(238),IS2(238) / 4204, 361,20756, 0/H DATA IS1(239),IS2(239),IS1(240),IS2(240) /20312, 231,16724, 364/H DATA IS1(241),IS2(241),IS1(242),IS2(242) /15636, 166,12996, 1354/H DATA IS1(243),IS2(243),IS1(244),IS2(244) / 9068, 327, 6164, 132/H DATA IS1(245),IS2(245),IS1(246),IS2(246) / 3948, 361,13252, 1388/H DATA IS1(247),IS2(247),IS1(248),IS2(248) /12120, 231,16724, 364/H DATA IS1(249),IS2(249),IS1(250),IS2(250) /14868, 166,18197, 166/H DATA IS1(251),IS2(251),IS1(252),IS2(252) / 8044, 327, 6420, 132/H DATA IS1(253),IS2(253),IS1(254),IS2(254) / 2412, 361,20756, 0/H DATA IS1(255),IS2(255),IS1(256),IS2(256) / 4440, 231,16724, 364/CAC *EXIT PARAMETERSC MHALT - HALT FLAG2!C 0 - NORMAL RUN CONDITION,,C 1 - ILLEGAL INSTRUCTION ENCOUNTERED8C 2 - TERMINATION BY USER ON AN INPUT INSTRUCTION,C 3 - ERROR ENCOUNTERED ON USER INPUT&C 4 - HALT INSTRUCTION EXECUTEDC,C6%C SET INSTRUCTION SIMULATION FLAG2 ISIM = 1 MHALT = 03$C CHECK FOR INTERRUPT PROCESSING REAL1 = 0.! IF(ICFLG .GT. 0) GO TO 74201 IAR = IPC11C SET JUMP OR RETURN ADDRESS TO INDICATE NONE  IPCS = -1.6C SET NUMBER OF JUMP AND CALL EXTRA CYCLES TO ZERO ICYCD = 0-&C RESET TRACE AND BREAKPOINT FLAGS NTRAF = 0N NBRKF = 0PCC SET INTERRUPT ENABLE BITS IF INDICATED BY DELAYED ENABLE FLAG  IF(INTED .EQ. 0) GO TO 20, INTE = 1 INTED = 0A%C FETCH FIRST BYTE OF INSTRUCTION 20 MDIR = 0 IADD = IAR CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IADD = IADD+1. IOP = IMEMCPC CU$C FETCH INSTRUCTION CONTROL WORDC= I = IOP+1U ICTL1 = IS1(I) ICTL2 = IS2(I)CC DETERMINE SOURCE AND DESTINATION REGISTERS (NOT FOR ALL INST)  ISOR = IOP-(IOP/8)*8+1 IDES = IOP/8 IDES = IDES-(IDES/8)*8 IDES1 = IDES-(IDES/2)*2QC ICC = (BITS 4,5)+1 ICC = IDES/2+1'C ISOLATE DESTINATION REGISTER PAIR IDESD = (IDES/2)*2+1>C INCREMENT DESTINATION REGISTER SO IT WILL POINT TO ARRAY IDES = IDES+1 BC BREAK UP CONTROL WORDS INTO INSTRUCTION TYPE, OPERAND TYPES,&C BYTE COUNT, AND CYCLE COUNT,ETC. ITYPE = ICTL1/256  ICTL1 = ICTL1-ITYPE*256N IOPN = ICTL1/16  ICTL1 = ICTL1-IOPN*16/ IBYTE = ICTL1/4P ICTL1 = ICTL1-IBYTE*4) IEAD = ICTL1/2 IHL = ICTL1-IEAD*2 IEFF = ICTL2/1024  ICTL2 = ICTL2-IEFF*1024T ICYC = ICTL2/32 IF(PTYPE .NE. 0) GO TO 140 ICYC = ICTL2-ICYC*32*C FETCH REMAINING BYTES OF INSTRUCTION140 J = IBYTE-1C IF(J .EQ. 0) GO TO 145 DO 142 I=1,J CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IADD = IADD+1. IOPX(I) = IMEM142 CONTINUECT-C PROCESS INSTRUCTION OPERANDS IF PRESENTTC 145 INTRR = 0CB GO TO (260,160,170,180,190,200,190,200,170,240,200,300),IOPN(C REGISTER ADDRESSING, USE IDES BITS160 IOPR = IREG(IDES)C GO TO 260 (C REGISTER ADDRESSING, USE ISOR BITS170 IOPR = IREG(ISOR)E GO TO 260EC REGISTER PAIR ADDRESSING180 REAL1 = IREG(IDESD)  I = IDESD+12 REAL2 = IREG(I)W GO TO 205NC 8 BIT IMMEDIATE 190 IOPR = IOP2  GO TO 260C 16 BIT DIRECT ADDRESSC200 REAL1 = IOP3 REAL2 = IOP2205 IOPA = REAL1*256.+REAL2  GO TO 2601C STACK POINTER ADDRESSING240 IOPA = ISP&C CHECK FOR MEMORY (HL) ADDRESSING260 IF(IHL .EQ. 0) GO TO 280 REAL1 = IREGHE REAL2 = IREGL IOPA = REAL1*256.+REAL2 $C IF OPERAND IS IN MEMORY, FETCH280 IF(IEAD .EQ. 0) GO TO 300 IADD = IOPA CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IOPR = IMEM CR.C BRANCH TO INSTRUCTION PROCESSING ROUTINECR?300 GO TO (1000,1000,1200,1200,1400,1400,1610,1600,1600,1900,2: 1 2000,2100,1600,1600,1600,1600,2100,1600,1600,2900,: 2 3000,3100,3200,3300,3400,3500,3600,3700,3800,3900,: 3 3900,3910,3900,3900,3900,3900,3900,3900,4800,4800,: 4 5000,5100,5200,5200,5400,5500,5500,5700,5800,5910,: 5 6000,6100,6200,5900,5910,6500,6600,5900,5900,5900,: 6 5900,5900,5900,7300,7400,5900,7500,7500,7700,7800,: 7 7900,8000,8000,8200,8300,8300,8500,8600,8600,8800, 8 8850),ITYPEE8C ADD IMMEDIATE BYTE WITH CARRY *** ACI8C ADD REGISTER WITH CARRY *** ADC1000 KSET = 1 GO TO 12058C ADD REGISTER TO ACCUMULATOR *** ADD8C ADD IMMEDIATE BYTE TO ACCUMULATOR *** ADI1200 KSET = 01205 I1 = IOPR-(IOPR/16)*16 I2 = IREGA-(IREGA/16)*16# IREGA = IREGA+IOPR+KSET*CARRY9C SET IDC AND CARRY BITS! IDC = (I1+I2+CARRY*KSET)/160 CARRY = IREGA/2560 IREGA = IREGA-CARRY*256, GO TO 90008C AND REGISTER WITH ACCUMULATOR *** ANA8C AND IMMEDIATE BYTE WITH ACCUMULATOR *** ANI1400 IFUNC = 1 IDC = 1  GO TO 86159C CALL INSTRUCTIONS *** CALLC?C *** CC,CZ,ETC./'1600 IF(FF(ICC) .NE. IDES1) GO TO 9900 $C UNCONDITIONAL CALL ENTRY POINT1610 ICYCD = 6A! IF(PTYPE .NE. 0) GO TO 1620K ICYCD = 9A1620 REAL1 = 3. EADDR = IOPA GO TO 74208C COMPLEMENT ACCUMULATOR *** CMA1900 IREGA = 255-IREGAE GO TO 99008C COMPLEMENT CARRY *** CMC2000 CARRY = 1-CARRY  GO TO 99008C COMPARE REGISTER TO ACCUMULATOR *** CMP8C COMPARE IMMEDIATE BYTE TO ACCUMULATOR *** CPI2100 ITEM1 = 256-IOPR ITEM2 = ITEM1-1AC SET IDC AND CARRY FLAGS  I1 = ITEM2-(ITEM2/16)*16 I2 = IREGA-(IREGA/16)*16 IDC = (I1+I2+1)/16 IREGT = IREGA+ITEM1  CARRY = 1C# IF(IREGT .LT. 256) GO TO 9100 IREGT = IREGT-256 CARRY = 0 GO TO 91008C DECIMAL ADJUST ACCUMULATOR *** DAA2900 IT = IREGA-(IREGA/16)*16C ADJUST LOWER DIGIT IF(IDC .NE. 0) GO TO 2920P IF(IT .LT. 10) GO TO 2925 2920 IREGA = IREGA+6M IDC = 0 ! ITEM1 = IREGA-(IREGA/16)*16 ! IF(ITEM1 .GT. 5) GO TO 2925( IDC = 1 C ADJUST UPPER DIGIT2925 IT = IREGA/162! IF(CARRY .NE. 0) GO TO 2940 IF(IT .LT. 10) GO TO 2950.2940 IREGA = IREGA+96#2950 IF(IREGA .LT. 256) GO TO 9000 # IREGA = IREGA-(IREGA/256)*256D CARRY = 1  GO TO 90008C DOUBLE REGISTER ADD *** DAD3000 REAL1 = IREGHE IVAL = IREGL! IVAL = IOPA+REAL1*256.+IVAL0 IREGH = IVAL/256.  REAL1 = IREGH  IREGL = IVAL-REAL1*256.F CARRY = IREGH/256( IREGH = IREGH-CARRY*256U GO TO 99008C DECREMENT REGISTER OR MEMORY(HL) *** DCR3100 IREGT = IOPR-1! IF(IREGT .GE. 0) GO TO 3120  IREGT = 255GC SET IDC STATUS BIT 3120 IDC = 16! ITEM1 = IREGT-(IREGT/16)*16T" IF(ITEM1 .NE. 15) GO TO 3740 IDC = 0  GO TO 37408C DECREMENT REGISTER PAIR *** DCX3200 IOPA = IOPA-1.! IF(IOPA .GE. 0.) GO TO 3840R IOPA = 65535.V GO TO 38407C DISABLE INTERRUPT *** DI 3300 INTE = 0 GO TO 99007C ENABLE INTERRUPT *** EIR3400 INTED = 1T GO TO 99008C HALT INSTRUCTION *** HLT3500 MHALT = 4M GO TO 99007C INPUT INSTRUCTION *** IN 3600 NREG = IOPR CALL IORWE IREGA = IREGT  GO TO 99008C INCREMENT REGISTER OR MEMORY(HL) *** INR3700 IREGT = IOPR+1# IF(IREGT .NE. 256) GO TO 3720R IREGT = 0 C SET IDC STATUS BIT 3720 IDC = 0 ! ITEM1 = IREGT-(IREGT/16)*16 ! IF(ITEM1 .NE. 0) GO TO 37404 IDC = 1C PLACE RESULT IN REGISTER3740 IREG(IDES) = IREGT IF(IDES .NE. 7) GO TO 9100C PLACE RESULT IN (HL) IADD = IOPA  IMEM = IREGT MDIR = 1 CALL MEMRW IF(IERR .NE. 0) GO TO 8900 GO TO 91008C INCREMENT REGISTER PAIR *** INX3800 IOPA = IOPA+1.% IF(IOPA .NE. 65536.) GO TO 3840 IOPA = 0.#C PLACE RESULT IN REGISTER PAIR !3840 IF(IOPN .EQ. 10) GO TO 38601 ITEM1 = IOPA/256.) REAL1 = ITEM1D ITEM2 = IOPA-REAL1*256.E IREG(IDESD) = ITEM1I I = IDESD+1  IREG(I) = ITEM2  GO TO 9900#C PLACE RESULT IN STACK POINTER=3860 ISP = IOPA GO TO 99008C JUMP INSTRUCTIONS *** JMP?C *** JC,JZ,ETC.O'3900 IF(FF(ICC) .NE. IDES1) GO TO 9900G(C ENTRY POINT FOR UNCONDITIONAL JUMP!3910 IF(PTYPE .NE. 0) GO TO 3920I ICYCD = 3O3920 IPCS = IOPA  GO TO 99008C LOAD REGISTER A DIRECT *** LDA9C LOAD REGISTER A INDIRECT *** LDAXM4800 IREGA = IOPR GO TO 99009C LOAD H,L REGISTER PAIR DIRECT *** LHLD 5000 IREGL = IOPR IADD = IOPA+1. CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IREGH = IMEM GO TO 99008C LOAD REGISTER PAIR IMMEDIATE *** LXI!5100 IF(IOPN .EQ. 11) GO TO 5150  IREG(IDESD) = IOP3 I = IDESD+1= IREG(I) = IOP2 GO TO 9900"C LOAD STACK POINTER IMMEDIATE5150 ISP = IOPA GO TO 99008C REGISTER AND MEMORY MOVE INSTRUCTIONS *** MOV8C REGISTER AND MEMORY(HL) MOVE IMMEDIATE *** MVI 5200 IF(IDES .EQ. 7) GO TO 5250C MOVE VALUE TO REGISTER IREG(IDES) = IOPRN GO TO 99000C MOVE REGISTER OR IMMEDIATE VALUE TO MEMORY5250 IMEM = IOPRA IADD = IOPA* MDIR = 1 GO TO 80508C NO OPERATION INSTRUCTION *** NOP5400 GO TO 99008C LOGICAL OR REGISTER *** ORA8C LOGICAL OR IMMEDIATE BYTE *** ORI5500 IFUNC = 2  GO TO 86108C OUTPUT INSTURCTION *** OUT5700 NREG = IOPRO MDIR = 1 MVAL = IREGA CALL IORWE GO TO 99009C EXCHANGE PROGRAM COUNTER, HL REGISTER PAIR *** PCHLY5800 IPCS = IOPAA GO TO 99008C POP STACK (ALSO ENTRY POINT FOR RET INST) *** POP1C CHECK FOR CONDITIONAL RETURNS NOT RETURNING9'5900 IF(FF(ICC) .NE. IDES1) GO TO 9900  ICYCD = 6A-C FETCH DATA FROM STACK (POP ENTRY POINT) 5910 IADD = ISP CALL MEMRW IF(IERR .NE. 0) GO TO 8900 ITEM1 = IMEM ISP = ISP+1.$ IF(ISP .NE. 65536.) GO TO 5920 ISP = 0.5920 IADD = ISP CALL MEMRW IF(IERR .NE. 0) GO TO 8900 ISP = ISP+1.$ IF(ISP .NE. 65536.) GO TO 5930 ISP = 0.#C CHECK FOR RETURN INSTRUCTIONS*"5930 IF(ITYPE .NE. 50) GO TO 6300'C FINISH PROCESSING POP INSTRCTIONS.! IF(IOPN .EQ. 12) GO TO 5950 C POP REGISTER PAIRO IREG(IDESD) = IMEM I = IDESD+1 IREG(I) = ITEM1  GO TO 9900C POP STATUS AND A REGISTER 5950 IREGA = IMEM KSIGN = ITEM1/128T ITEM1 = ITEM1-KSIGN*128A ZERO = ITEM1/64M ITEM1 = ITEM1-ZERO*64T IDC = ITEM1/16 ITEM1 = ITEM1-IDC*16 IDC = IDC-(IDC/2)*2  PARTY = ITEM1/4U ITEM1 = ITEM1-PARTY*4Y CARRY = ITEM1-(ITEM1/2)*2I GO TO 99009C PUSH INSTRUCTION *** PUSH !6000 IF(IOPN .EQ. 12) GO TO 6050 C PUSH REGISTER PAIR IMEM = IREG(IDESD) I = IDESD+1  ITEM1 = IREG(I)S GO TO 7430 C PUSH A REGISTER AND STATUS6050 IMEM = IREGA6 ITEM1 = KSIGN*128+ZERO*64+IDC*16+PARTY*4+CARRY+2 GO TO 74308C ROTATE ACCUMULATOR LEFT THROUGH CARRY *** RAL6100 ITEM1 = CARRYT GO TO 66108C ROTATE ACCUMULATOR RIGHT THROUGH CARRY *** RAR6200 ITEM1 = CARRY  GO TO 73108C UNCONDITIONAL RETURN (ENTRY POINT AT POP) *** RET?C CONDITIONAL RETURNS (ENTRY POINT AT POP) *** RC,RZ,ETC.S6300 REAL1 = IMEM REAL2 = ITEM1G IPCS = REAL1*256.+REAL2U GO TO 99008C READ INTERRUPT MASK *** RIM!6500 IF(PTYPE .NE. 0) GO TO 8850T SERIO = 1A CALL IORWF SERIO = 0 * IREGA = SID*128+INTP*16+INTE*8+IMASK GO TO 99008C ROTATE ACCUMULATOR LEFT *** RLC6600 ITEM1 = IREGA/12836610 CARRY = IREGA/128E% IREGA = IREGA*2+ITEM1-CARRY*256  GO TO 99008C ROTATE ACCUMULATOR RIGHT *** RRC7300 ITEM1 = IREGA-(IREGA/2)*2 7310 CARRY = IREGA-(IREGA/2)*2O IREGA = IREGA/2+ITEM1*128S GO TO 99008C RESTART INSTRUCTION *** RST7400 REAL1 = 1. EADDR = IOP-199  IOPR = IDES-1I7420 IF(INTIP.EQ.0)GOTO 7425 REAL1=0-C DIVIDE 16 BIT RETURN ADDRESS INTO BYTES 7425 IPC1=IPC+REAL1  IMEM = IPC1/256. REAL1 = IMEM ITEM1 = IPC1-REAL1*256.A IPCS = EADDRC PUSH DATA ONTO STACK7430 MDIR = 1 ISP = ISP-1. IF(ISP .GE. 0.) GO TO 7440 ISP = 65535.7440 IADD = ISP CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IMEM = ITEM1 ISP = ISP-1. IF(ISP .GE. 0.) GO TO 7450 ISP = 65535.7450 IADD = ISP GO TO 80508C SUBTRACT REGISTER WITH BORROW *** SBB8C SUBTRACT IMMEDIATE BYTE WITH BORROW *** SBI7500 KSET = 1 GO TO 83109C STORE HL REGISTER PAIR DIRECT *** SHLDT7700 IADD = IOPA  IMEM = IREGL MDIR = 1 CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IADD = IADD+1. IMEM = IREGH GO TO 80508C SET INTERRUPT MASK *** SIM!7800 IF(PTYPE .NE. 0) GO TO 88505 ITEM1 = IREGAPC ISOLATE SERIAL OUTPUT BITT MVAL = ITEM1/128 ITEM1 = ITEM1-MVAL*128&C ISOLATE SERIAL OUTPUT ENABLE BIT I = ITEM1/64 ITEM1 = ITEM1-64*I IF(I .EQ. 0) GO TO 7810 C OUTPUT SERIAL OUTPUT BIT SERIO = 1  MDIR = 1 CALL IORW  SERIO = 0 C IGNORE NEXT BIT !7810 ITEM1 = ITEM1-(ITEM1/32)*32MC ISOLATE RESET RST7.5 BIT I = ITEM1/16 ITEM1 = ITEM1-I*16 IF(I .EQ. 0) GO TO 7820)C RESET RST7.5 BIT INT75 = 0 C ISOLATE MASK SET ENABLE 7820 I = ITEM1/8 ITEM1 = ITEM1-I*81 IF(I .EQ. 0) GO TO 9900 C SET INTERRUPT MASK IMASK = ITEM1T GO TO 99009C MOVE HL PAIR TO STACK POINTER *** SPHL 7900 ISP = IOPA GO TO 99008C STORE ACCUMULATOR DIRECT *** STA9C STORE ACCUMULATOR INDIRECT *** STAXB8000 IMEM = IREGA IADD = IOPAT MDIR = 18050 CALL MEMRW IF(IERR .NE. 0) GO TO 8900 GO TO 99008C SET CARRY FLAG *** STC8200 CARRY = 1 GOTO 9900)8C SUBYRACT REGISTER FROM ACCUMULATOR *** SUB8C SUBTRACT IMMEDIATE BYTE FROM ACCUMULATOR *** SBI8300 KSET = 08310 ITEM1 = 256-IOPR ITEM2 = ITEM1-1  I1 = ITEM2-(ITEM2/16)*16 I2 = IREGA-(IREGA/16)*16$ IREGA = IREGA+ITEM1-CARRY*KSETC SET IDC AND CARRY BITS# IDC = (I1+I2+1-CARRY*KSET)/16 CARRY = 1# IF(IREGA .LT. 256) GO TO 9000  IREGA = IREGA-256A CARRY = 0  GO TO 90009C EXCHANGE HL REGISTER PAIR WITH DE PAIR *** XCHGT8500 ITEM1 = IREGLL IREGL = IREGE IREGE = ITEM1A ITEM1 = IREGHT IREGH = IREGDS IREGD = ITEM1  GO TO 99008C EXCLUSIVE OR REGISTER WITH ACCUMULATOR *** XRA8C EXCLUSIVE OR IMMEDIATE WITH ACCUMULATOR *** XRI8600 IFUNC = 3N 8610 IDC = 0 8615 IOPR2 = IREGAR CALL FUNC  IREGA = MVAL CARRY = 0) GO TO 90009C EXCHANGE HL PAIR WITH TOP OF STACK *** XTHL 8800 IADD = ISP!C FETCH FIRST BYTE FROM STACKH CALL MEMRW IF(IERR .NE. 0) GO TO 8900 ITEM1 = IMEMC PLACE L REGISTER ON STACK  IMEM = IREGL MDIR = 1 CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IREGL = ITEM1 C INCREMENT STACK ADDRESSC IADD = ISP+1.% IF(IADD .NE. 65536.) GO TO 8820  IADD = 0. !C READ SECOND BYTE FROM STACK8820 MDIR = 0 CALL MEMRW IF(IERR .NE. 0) GO TO 8900 ITEM1 = IMEMC PLACE H REGISTER ON STACKE IMEM = IREGH MDIR = 1 CALL MEMRW IF(IERR .NE. 0) GO TO 8900 IREGH = ITEM1C GO TO 9900<C ILLEGAL INSTRUCTION *** ILLEGAL8850 MESSN = 20 GO TO 8925CRC ERROR MESSAGESCM8900 IF(IERR-2) 8910,8920,9900I*C ATTEMPT TO WRITE TO PROTECTED MEMORY8910 MESSN = 23 GO TO 8925C ADDRESS TOO LARGE08920 MESSN = 108925 CALL MESS  MHALT = 1O GO TO 9900C C SET CONDITION CODESTCO9000 IREGT = IREGA=C SET ZERO AND SIGN FLAGSA9100 ZERO = 0! IF(IREGT .NE. 0) GO TO 9120R ZERO = 19120 KSIGN = IREGT/128EC SET PARITY BIT J = 128  PARTY = 10 DO 9170 I=1,8O PARTY = IREGT/J+PARTYS IREGT = IREGT-(IREGT/J)*J9 J = J/2 9170 CONTINUE PARTY = PARTY-(PARTY/2)*2 9900 MDIR = 0 ISIM = 0 RETURN ENDE SUBROUTINE DISPLCC :C THIS ROUTINE IS USED TO DISPLAY ANY OUTPUT REQUESTED<C BY THE USER. THIS INCLUDES INSTRUCTION TRACES, MEMORYC DUMPS, ETC. CFCE" INTEGER FFO(10),FF(5),FF1(4)5 DIMENSION IROU1(16),IROU2(16),MNE1(81),MNE2(81) ) DIMENSION MNOP1(8),MNOP2(3),IREG(8) 2 DIMENSION RARRY(3),NOUT(7),NUMS(10),ICOUT(5)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILU@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)S; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ0 EQUIVALENCE (RARRY(1),ISP),(IREG(1),IREGB)? EQUIVALENCE (NUMS(1),IALPH(1)),(FF(1),ZERO),(FF1(1),INTE)O5 EQUIVALENCE (ICHRA,IALPH(11)),(ICHRC,IALPH(13))T5 EQUIVALENCE (ICHRI,IALPH(19)),(ICHRR,IALPH(28)),5 EQUIVALENCE (IRPAR,IALPH(48)),(ILPAR,IALPH(47)),5 EQUIVALENCE (ICHRP,IALPH(26)),(ICHRS,IALPH(29))M# EQUIVALENCE (ICHRW,IALPH(33))MD DATA MNE1( 1),MNE2( 1),MNE1( 2),MNE2( 2) /2HAC,2HI ,2HAD,2HC /D DATA MNE1( 3),MNE2( 3),MNE1( 4),MNE2( 4) /2HAD,2HD ,2HAD,2HI /D DATA MNE1( 5),MNE2( 5),MNE1( 6),MNE2( 6) /2HAN,2HA ,2HAN,2HI /D DATA MNE1( 7),MNE2( 7),MNE1( 8),MNE2( 8) /2HCA,2HLL,2HCC,2H /D DATA MNE1( 9),MNE2( 9),MNE1(10),MNE2(10) /2HCM,2H ,2HCM,2HA /D DATA MNE1(11),MNE2(11),MNE1(12),MNE2(12) /2HCM,2HC ,2HCM,2HP /D DATA MNE1(13),MNE2(13),MNE1(14),MNE2(14) /2HCN,2HC ,2HCN,2HZ /D DATA MNE1(15),MNE2(15),MNE1(16),MNE2(16) /2HCP,2H ,2HCP,2HE /D DATA MNE1(17),MNE2(17),MNE1(18),MNE2(18) /2HCP,2HI ,2HCP,2HO /D DATA MNE1(19),MNE2(19),MNE1(20),MNE2(20) /2HCZ,2H ,2HDA,2HA /D DATA MNE1(21),MNE2(21),MNE1(22),MNE2(22) /2HDA,2HD ,2HDC,2HR /D DATA MNE1(23),MNE2(23),MNE1(24),MNE2(24) /2HDC,2HX ,2HDI,2H /D DATA MNE1(25),MNE2(25),MNE1(26),MNE2(26) /2HEI,2H ,2HHL,2HT /D DATA MNE1(27),MNE2(27),MNE1(28),MNE2(28) /2HIN,2H ,2HIN,2HR /D DATA MNE1(29),MNE2(29),MNE1(30),MNE2(30) /2HIN,2HX ,2HJC,2H /D DATA MNE1(31),MNE2(31),MNE1(32),MNE2(32) /2HJM,2H ,2HJM,2HP /D DATA MNE1(33),MNE2(33),MNE1(34),MNE2(34) /2HJN,2HC ,2HJN,2HZ /D DATA MNE1(35),MNE2(35),MNE1(36),MNE2(36) /2HJP,2H ,2HJP,2HE /D DATA MNE1(37),MNE2(37),MNE1(38),MNE2(38) /2HJP,2HO ,2HJZ,2H /D DATA MNE1(39),MNE2(39),MNE1(40),MNE2(40) /2HLD,2HA ,2HLD,2HAX/D DATA MNE1(41),MNE2(41),MNE1(42),MNE2(42) /2HLH,2HLD,2HLX,2HI /D DATA MNE1(43),MNE2(43),MNE1(44),MNE2(44) /2HMO,2HV ,2HMV,2HI /D DATA MNE1(45),MNE2(45),MNE1(46),MNE2(46) /2HNO,2HP ,2HOR,2HA /D DATA MNE1(47),MNE2(47),MNE1(48),MNE2(48) /2HOR,2HI ,2HOU,2HT /D DATA MNE1(49),MNE2(49),MNE1(50),MNE2(50) /2HPC,2HHL,2HPO,2HP /D DATA MNE1(51),MNE2(51),MNE1(52),MNE2(52) /2HPU,2HSH,2HRA,2HL /D DATA MNE1(53),MNE2(53),MNE1(54),MNE2(54) /2HRA,2HR ,2HRC,2H /D DATA MNE1(55),MNE2(55),MNE1(56),MNE2(56) /2HRE,2HT ,2HRI,2HM /D DATA MNE1(57),MNE2(57),MNE1(58),MNE2(58) /2HRL,2HC ,2HRM,2H /D DATA MNE1(59),MNE2(59),MNE1(60),MNE2(60) /2HRN,2HC ,2HRN,2HZ /D DATA MNE1(61),MNE2(61),MNE1(62),MNE2(62) /2HRP,2H ,2HRP,2HE /D DATA MNE1(63),MNE2(63),MNE1(64),MNE2(64) /2HRP,2HO ,2HRR,2HC /D DATA MNE1(65),MNE2(65),MNE1(66),MNE2(66) /2HRS,2HT ,2HRZ,2H /D DATA MNE1(67),MNE2(67),MNE1(68),MNE2(68) /2HSB,2HB ,2HSB,2HI /D DATA MNE1(69),MNE2(69),MNE1(70),MNE2(70) /2HSH,2HLD,2HSI,2HM /D DATA MNE1(71),MNE2(71),MNE1(72),MNE2(72) /2HSP,2HHL,2HST,2HA /D DATA MNE1(73),MNE2(73),MNE1(74),MNE2(74) /2HST,2HAX,2HST,2HC /D DATA MNE1(75),MNE2(75),MNE1(76),MNE2(76) /2HSU,2HB ,2HSU,2HI /D DATA MNE1(77),MNE2(77),MNE1(78),MNE2(78) /2HXC,2HHG,2HXR,2HA /D DATA MNE1(79),MNE2(79),MNE1(80),MNE2(80) /2HXR,2HI ,2HXT,2HHL/: DATA MNE1(81),MNE2(81) /2H ,2H /@ DATA MNOP1(1),MNOP1(2),MNOP1(3),MNOP1(4) /1HB,1HC,1HD,1HE/@ DATA MNOP1(5),MNOP1(6),MNOP1(7),MNOP1(8) /1HH,1HL,1HM,1HA/3 DATA MNOP2(1),MNOP2(2),MNOP2(3) /1HB,1HD,1HH/MC(C *ENTRY PARAMETERS2C NDISF - DISPLAY FUNCTION%C 1 = STANDARD TRACE LINE77C 2 = DISPLAY INTERRUPT MASK AND SERIAL I/OE C 3 = DISPLAY MEMORY!C 4 = DISPLAY HEADINGE4C 5 = SAME AS 1 WITH NO HEADING (FOR DC)2C 6 = SAME AS 3 FOR SUBSTITUTE COMMAND-C IDFRM - DISPLAY MEMORY STARTING ADDRESS,+C IDTO - DISPLAY MEMORY ENDING ADDRESS7"C IDFMT - TRACE DISPLAY FORMAT"C 1 = STANDARD DISPLAYC 2 = SHORT DISPLAYM"C ITYPE - INSTRUCTION MNEMONIC%C IND1 - OPERAND 1 MNEMONIC TYPEN%C IND2 - OPERAND 2 MNEMONIC TYPE 'C ICFLG - CONTROL FLAG FOR DISPLAYSIC -2 = INPUT C -1 = OUTPUT C 0 = PROGRAM MEMORYCDC . GO TO (100,1000,2000,850,100,2000),NDISF100 NHEXF = 1 EC CONVERT PC, NEXT PC, AND STACK POINTER TO DISPLAYABE CHARACTERSY DO 200 I=1,3 IVAL = RARRY(I)A INDET = I  CALL AVHEX200 CONTINUE*C SET MNEMONIC OPERAND ARRAY TO BLANKS DO 220 I=1,7 NOUT(I) = IBLNK 220 CONTINUE%C SET EFFECTIVE ADDRESS TO BLANKS DO 230 I=1,4 IADDR(4,I) = IBLNK230 CONTINUE IEA1 = IBLNK IEA2 = IBLNK INDET = 5 C FORM INSTRUCTION OPERANDS1 NCNT = 1B GO TO (500,320,330,340,350,360,320,340,320,400,400,410),IOPN(C REGISTER OPERAND, DESTINATION BITS320 NOUT(NCNT) = MNOP1(IDES) IF(IOPN .EQ. 2) GO TO 500L"C INSTRUCTION HAS TWO OPERANDS NCNT = NCNT+1T NOUT(NCNT) = ICOMM NCNT = NCNT+1B$C CHECK FOR IMMEDIATE ADDRESSING IF(IOPN .EQ. 7) GO TO 3502.C REGISTER,REGISTER (IDES,ISOR) ADDRESSING#C REGISTER OPERAND, SOURCE BITSI330 NOUT(NCNT) = MNOP1(ISOR) GO TO 500EC REGISTER PAIR ADDRESSING340 NOUT(NCNT) = MNOP2(ICC)0 IF(IOPN .EQ. 4) GO TO 500  GO TO 405 C 8 BIT IMMEDIATE OPERANDN350 IVAL = IOPR  NHEXF = 02 J = 3 GO TO 365 (C 16 BIT IMMEDIATE OR DIRECT OPERAND360 IVAL = IOPAO NHEXF = 1N J = 1 365 CALL AVHEX DO 368 I=J,4 NOUT(NCNT) = IADDR(5,I)  NCNT = NCNT+1I368 CONTINUE GO TO 500TC STACK POINTER OPERAND 400 NOUT(NCNT) = ICHRS NCNT = NCNT+1  NOUT(NCNT) = ICHRP IF(IOPN .EQ. 10) GO TO 500$C LOAD 16 BIT REGISTER IMMEDIATE405 NCNT = NCNT+1  NOUT(NCNT) = ICOMM NCNT = NCNT+1  GO TO 360 C PSW ADDRESSING410 NOUT(NCNT) = ICHRP NCNT = NCNT+1D NOUT(NCNT) = ICHRS NCNT = NCNT+1  NOUT(NCNT) = ICHRWC C FORM CYCLE COUNTCN500 KDIV = 1000  MVAL = ICYCT DO 510 I=1,4 NCNT = 1+MVAL/KDIV ICOUT(I) = NUMS(NCNT)N MVAL = MVAL-KDIV*(NCNT-1)  KDIV = KDIV/10510 CONTINUEC 7C CONVERT REGISTER VALUES TO DISPLAYABLE CHARACTERS NHEXF = 0+ DO 560 I=1,8 IVAL = IREG(I) CALL AVHEX IROU1(I) = NH1 IROU2(I) = NH2560 CONTINUE)C CHECK FOR EFFECTIVE ADDRESS DISPLAYS NHEXF = 0N IF(IEFF .EQ. 0) GO TO 700  INDET = 4E IVAL = IMEMD CALL AVHEX IEA1 = NH1 IEA2 = NH2 NHEXF = 1/ IVAL = IADD) CALL AVHEX-C CONVERT FLAGS TO DISPLAYABLE CHARACTERSI700 DO 760 I=1,5 II = FF(I)+1 FFO(I) = NUMS(II)Y760 CONTINUEC 6C OUTPUT STATE OF MICROPROCESSOR *****C C CHECK FOR HEADINGU IF(NDISF .EQ. 5) GO TO 890 IF(IDFMT .EQ. 2) GO TO 900 IF(IHCTL .LE. 0) GO TO 890 IHVAL = IHVAL-1 IF(IHVAL .NE. 0) GO TO 890 IHVAL = IHCTLDC WRITE OUT HEADING 850 WRITE(IOPRT,10000)>10000 FORMAT(/,4H PC,6X,4HINST,8X,2HEA,1X,4H(EA),1X,3HNPC,3X,; 1 5HCZSPI,2X,23HA B C D E H L ,2HSP,3X,3HCYC)5! IF(NDISF .EQ. 4) GO TO 9000=E890 WRITE (IOPRT,10010) (IADDR(3,I),I=1,4),MNE1(ITYPE),MNE2(ITYPE), 5 1 (NOUT(I),I=1,7),(IADDR(4,I),I=1,4),IEA1,IEA2,N> 2 (IADDR(2,I),I=1,4),FFO(2),FFO(1),FFO(4),FFO(3),FFO(5),4 3 IROU1(8),IROU2(8),(IROU1(I),IROU2(I),I=1,6),* 4 (IADDR(1,I),I=1,4),(ICOUT(I),I=1,4):10010 FORMAT(1X,4A1,2X,2A2,1X,7A1,2X,4A1,1X,2A1,2X,4A1,2X,' 1 5A1,2X,7(2A1,1X),1X,4A1,2X,4A1), GO TO 9000C,%C DISPLAY TRACE WITH SHORT FORMAT C D900 WRITE(IOPRT,10010) (IADDR(3,I),I=1,4),MNE1(ITYPE),MNE2(ITYPE),) 1 (NOUT(I),I=1,7),IROU1(8),IROU2(8)M GO TO 9000C CU7C DISPLAY INTERRUPT MASK AND SERIAL I/O BITS *****RCI<C CONVERT SERIAL I/O BITS,INTERRUPT DISABLE, AND RST 7.5%C FLAGS TO DISPLAYABLE CHARACTERS 1000 DO 1100 I=1,44 II = FF1(I)+10 FFO(I) = NUMS(II)11100 CONTINUE?C CONVERT PENDING INTERRUPT FLAGS TO DISPLAYABLE CHARACTERSO ITEM1 = INTP DO 1200 I=1,3O II = ITEM1-(ITEM1/2)*2+1 J = 8-I( FFO(J) = NUMS(II)N ITEM1 = ITEM1/2U1200 CONTINUE<C CONVERT INTERRUPT MASK FLAGS TO DISPLAYABLE CHARACTERS ITEM1 = IMASK/ DO 1300 I=1,3  II = ITEM1-(ITEM1/2)*2+1 J = 11-I FFO(J) = NUMS(II)O ITEM1 = ITEM1/2 1300 CONTINUEBC WRITE OUT INTERRUPT FLAGS AND SERIAL I/O BITS TO LIST DEVICE6 WRITE(IOPRT,10020) FFO(3),(FFO(I),I=5,7),FFO(1),% 1 (FFO(I),I=8,10),FFO(4),FFO(2) =10020 FORMAT(5X,5HIM = ,8A1,3X,6HSOD = ,A1,2X,9HINT7.5 = ,A1) GO TO 9000CI6C DISPLAY MEMORY AND I/O PORTS *****CN2000 KVAL = IDFRM/16. REAL1 = KVAL KVAL = IDFRM-REAL1*16. MDIR = 0 2020 K = 0E INDET = 1 NHEXF = 1  IVAL = IDFRM CALL AVHEX NHEXF = 0O INDET = 2T2050 IDFRM = IDFRM+1.! IF(ICFLG .LT. 0) GO TO 2160 C DISPLAY MEMORY IADD = IDFRM-1.F CALL MEMRW IVAL = IMEM) GO TO 2200C DISPLAY I/O,2160 ITEM1 = IDFRMN! ITEM1 = ITEM1+(ICFLG+2)*256 MVAL = IOTAB(ITEM1)O IVAL = MVAL-(MVAL/256)*2562200 CALL AVHEX KVAL = KVAL+1L K = K+1I IROU1(K) = NH1 IROU2(K) = NH2$ IF(IDFRM .GT. IDTO) GO TO 2400! IF(KVAL .LT. 16) GO TO 2050X KVAL = 0!2400 IF(NDISF .EQ. 6) GO TO 9000 E WRITE(IOPRT,10110) (IADDR(1,I),I=1,4),(IROU1(I),IROU2(I),I=1,K) ;10110 FORMAT(1X,4A1,2X,4(2A1,1X),2X,4(2A1,1X),2X,4(2A1,1X),  1 2X,4(2A1,1X))P IF(KVAL) 9000,2020,9000 9000 RETURN ENDG SUBROUTINE LOAD8CBCE6C THIS ROUTINE IS USED TO LOAD AN OBJECT MODULE IN;C INTEL'S HEXADECIMAL FORMAT. SYMBOL TABLE INFORMATION$C MAY BE INCLUDED IN THE MODULE.C CO DIMENSION NNUM(35)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILU@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)D; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ) EQUIVALENCE (IN(1),IN1),(IN(2),IN2)A EQUIVALENCE (NNUM(1),NNUM1),(NNUM(2),NNUM2),(NNUM(3),NNUM3) COC *ENTRY PARAMETERSA'C NCFLG - SYMBOL TABLE CONTROL FLAGO#C 0 = DONT READ SYMBOLSTC 1 = READ SYMBOLSCOC *EXIT PARAMETERSC IERR - RETURN STATUSFC 0 = NO ERRORC 1 = ERROR C CM IRREC = 1) NUMB = 0 IERR = 0 C READ OBJECT MODULE RECORDS100 K = IRRECP CALL INOUT(3) IF(IERR .EQ. 1) GO TO 930  IRREC = K+1I" IF(IN1 .NE. ICOLN) GO TO 200 ICOL = 2 NSUM = 0 KK = 0C GET NEXT BYTE120 MVAL = 0 DO 140 L=1,2 DO 130 K=1,16 * IF(IN(ICOL) .EQ. IALPH(K)) GO TO 135130 CONTINUE GO TO 910E135 MVAL = MVAL*16+K-1 ICOL = ICOL+1 140 CONTINUEC CHECK IF DATA COUNT IF(KK .NE. 0) GO TO 150B NUM = MVAL+4150 KK = KK+1C NNUM(KK) = MVAL  NSUM = NSUM+MVALC CHECK IF ALL DATA READ IF(KK .LE. NUM) GO TO 120C CHECK IF VALID CHECKSUM2 NSUM = NSUM-(NSUM/256)*256 IF(NSUM .NE. 0) GO TO 920T II = MXMEM/256. ! IF(NNUM2 .GE. II) GO TO 960  NUMB = NUMB+NNUM1I REAL1 = NNUM33 IADD = NNUM2 IADD = IADD*256.+REAL1 C CHECK IF ADDRESS TOO LARGE REAL1 = NNUM1C$ IF ((IADD+REAL1).GT.MXMEM) GOTO 960 IF(NNUM1 .EQ. 0) GO TO 170C PUT DATA INTO MEMORY MDIR = 1 DO 160 L=5,NUM IMEM = NNUM(L) CALL MEMRW IADD = IADD+1.160 CONTINUE GO TO 100 170 IPC = IADD GO TO 995 CF-C CHECK AND READ SYMBOL TABLE INFORMATION C 200 IF(NCFLG .LE. 0) GO TO 100 DO 210 K=1,72M$ IF(IN(K) .NE. IBLNK) GO TO 220210 CONTINUE GO TO 100A$220 IF(IN(K) .EQ. IDOLR) GO TO 100# IF(IN(K) .EQ. IAST) GO TO 1001230 ICOL = KC GET NEXT SYMBOLQ CALL SYMBL IF(IERR .NE. 1) GO TO 940D# IF(NULAB .LT. LTAB) GO TO 240M C HAVE SYMBOL TABLE OVERFLOW MESSN = 9. CALL MESS#C DONT PROCESS ANY MORE SYMBOLS  NCFLG = -1 GO TO 100 C GET SYMBOL VALUE240 CALL SCAN  IF(IERR .NE. 1) GO TO 940  NULAB = NULAB+1F ITABV(NULAB) = IVAL0 DO 250 K=1,IWORD ITAB(K,NULAB) = NAME(K) 250 CONTINUEC SCAN TO NEXT SYMBOL  IF (ICOL.GT.72) GOTO 100 DO 260 K=ICOL,72$ IF(IN(K) .NE. IBLNK) GO TO 230260 CONTINUE GO TO 100 CB!C OUTPUT LOAD MODULE MESSAGESLCVC INVALID CHARACTER910 MESSN = 17 GO TO 980SC CHECKSUM ERROR920 MESSN = 7  GO TO 980 C END OF FILE ENCOUNTEREDL930 MESSN = 8I GO TO 990 C SYMBOL TABLE FORMAT ERROR 940 MESSN = 13 GO TO 9800C ADDRESS OUT OF RANGE960 MESSN = 11C 980 IERR = 1990 CALL MESSOC OUTPUT BYTES READ MESSAGE 995 MESSN = 15 CALL MESS) RETURN END6 SUBROUTINE LABELC0C3C THIS ROUTINE FORMS A SYMBOL AND CHECKS IF THEA#C SYMBOL IS IN THE SYMBOL TABLE COC D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILA@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10) ; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,C *ENTRY PARAMETERSS%C ICOL - STARTING COLUMN OF SCANO/C NULAB - NUMBER OF SYMBOLS IN SYMBOL TABLENCHC *EXIT PARAMETERS#C ICHAR - TERMINATION CHARACTERM#C ICOL - ENDING COLUMN OF SCANIC INDEX - INDEX OF SYMBOLIC IERR - RETURN STATUSA!C 1 = SYMBOL IN TABLEM%C 2 = SYMBOL NOT IN TABLEEC 3 = SYMBOL ERRORC 4 = NOT USED#C 5 = SYMBOL TABLE FULLGC IVAL1 - SYMBOL VALUECPCA INDEX = 0C GET SYMBOL100 CALL SYMBL IF(IERR .EQ. 4) GO TO 930C CHECK IF SYMBOL IN TABLE$120 IF(INDEX .GE. NULAB) GO TO 920 INDEX = INDEX+1E DO 140 K=1,IWORD. IF(NAME(K) .NE. ITAB(K,INDEX)) GO TO 120140 CONTINUE-C SYMBOL IN TABLE, CHECK IF SYMBOL STRING # IF(ICHAR .NE. IDIV) GO TO 900  ICOL = ICOL+1E" IF(ICOL .LE. MCOL) GO TO 100C GET SYMBOL VALUE900 IVAL1 = ITABV(INDEX) IERR = 1 GO TO 990VC SYMBOL NOT IN TABLE 920 IERR = 2 GO TO 990SC SYMBOL ERROR930 IERR = 3 GO TO 990FC SYMBOL TABLE FULLF940 IERR = 5 990 RETURN END  SUBROUTINE SYMBLC1CO4C THIS ROUTINE IS USED TO FORM A SYMBOL FROM THE(C COMMAND LINE OR THE OBJECT MODULE.C CBD INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)M; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,C *ENTRY PARAMETERSS%C ICOL - STARTING COLUMN OF SCANOCRC *EXIT PARAMETERS#C ICOL - ENDING COLUMN OF SCANI"C ICHAR - TERMINATOR CHARACTERC NAME - SYMBOLC IERR - RETURN STATUSI1C 1 = SYMBOL ENDS WITH A BLANK OR TABU*C 2 = SYMBOL ENDS WITH A COMMA5C 3 = SYMBOLS ENDS WITH OTHER THAN 1 OR 2NC 4 = SYMBOL ERRORC NERR - SAME AS IERRC CM LABCT = 0( DO 10 J=1,IWORDP NAME(J) = 0 10 CONTINUE IC1 = 1T IC2 = 1LC CHECK FOR VALID CHARACTER100 ICHAR = IN(ICOL) DO 110 J=1,38C' IF(ICHAR .EQ. IALPH(J)) GO TO 200C110 CONTINUE,C END OF SCAN IF FOUND INVALID CHARACTER IF(LABCT .EQ. 0) GO TO 940"120 IF(IC2 .GT. ICCNT) GO TO 140 DO 130 J=IC2,ICCNT NAME(IC1) = NAME(IC1)*256T130 CONTINUEC CHECK FOR TERMINATOR$140 IF(ICHAR .EQ. IBLNK) GO TO 910$ IF(ICHAR .EQ. ICOMM) GO TO 920! IF(ICHAR-ICTAB) 930,990,930 <C CHECK IF MORE CHARACTERS THAN WILL FIT IN SYMBOL TABLE#200 IF(LABCT .GE. MLAB) GO TO 240) IF(LABCT .GT. 0) GO TO 210 IF(J .LE. 10) GO TO 940210 LABCT = LABCT+1N" IF(IC2 .LE. ICCNT) GO TO 220 IC1 = IC1+1Q IC2 = 1220 IC2 = IC2+1C*C FORM SYMBOL FOR PLACEMENT INTO TABLE! NAME(IC1) = NAME(IC1)*256+J 240 ICHAR = IBLNKC" IF(ICOL .GT. MCOL) GO TO 120 ICOL = ICOL+1  GO TO 100 CMC SET RETURN STATUSHCI#C SYMBOL ENDS WITH BLANK OR TABR910 IERR = 1 GO TO 990BC SYMBOL ENDS WITH A COMMA920 IERR = 2 GO TO 990T2C SYMBOL ENDS WITH OTHER THAN BLANK,TAB, COMMA930 IERR = 3 GO TO 990.C SYMBOL ERROR940 IERR = 4990 NERR = IERR RETURN END  SUBROUTINE SCANMC CO3C THIS ROUTINE IS USED TO OBTAIN THE VALUE OF AAC GENERALIZED EXPRESSION.MC)C 5 DIMENSION NBASE(5),NBASV(5),IASCI(59),ITERM(13) D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL @ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10) ; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ" EQUIVALENCE (ITERM(1),IBLNK)# EQUIVALENCE (IALPH(18),ICHRH)R@ DATA NBASE(1),NBASE(2),NBASE(3),NBASE(4) /1HH,1HQ,1HO,1HB/; DATA NBASE(5),NBASV(1),NBASV(2),NBASV(3) /1HD,16,8,8/I5 DATA NBASV(4),NBASV(5) /2,10/O@ DATA IASCI( 1),IASCI( 2),IASCI( 3),IASCI( 4) /48,49,50,51/@ DATA IASCI( 5),IASCI( 6),IASCI( 7),IASCI( 8) /52,53,54,55/@ DATA IASCI( 9),IASCI(10),IASCI(11),IASCI(12) /56,57,65,66/@ DATA IASCI(13),IASCI(14),IASCI(15),IASCI(16) /67,68,69,70/@ DATA IASCI(17),IASCI(18),IASCI(19),IASCI(20) /71,72,73,74/@ DATA IASCI(21),IASCI(22),IASCI(23),IASCI(24) /75,76,77,78/@ DATA IASCI(25),IASCI(26),IASCI(27),IASCI(28) /79,80,81,82/@ DATA IASCI(29),IASCI(30),IASCI(31),IASCI(32) /83,84,85,86/@ DATA IASCI(33),IASCI(34),IASCI(35),IASCI(36) /87,88,89,90/@ DATA IASCI(37),IASCI(38),IASCI(39),IASCI(40) /63,64,32,33/@ DATA IASCI(41),IASCI(42),IASCI(43),IASCI(44) /34,35,36,37/@ DATA IASCI(45),IASCI(46),IASCI(47),IASCI(48) /38,39,40,41/@ DATA IASCI(49),IASCI(50),IASCI(51),IASCI(52) /42,43,44,45/@ DATA IASCI(53),IASCI(54),IASCI(55),IASCI(56) /46,47,58,59/= DATA IASCI(57),IASCI(58),IASCI(59) /60,61,62/ICIC *ENTRY PARAMETERSI&C ICOL - START OF EXPRESSION SCANC)C *EXIT PARAMETERS C ICOL - END COLUMN OF SCAN"C ICHAR - TERMINATOR CHARACTER(C MVAL - EXPRESSION VALUE (INTEGER)%C IVAL - EXPRESSION VALUE (REAL)/C IERR - RETURN STATUS4:C 1 = VALID RETURN, TERMINATOR IS BLANK OR TAB3C 2 = VALID RETURN, TERMINATOR IS COMMAAC 3 = RESERVEDC 4 = SYNTAX ERROR"C 5 = UNDEFINED SYMBOL C 6 = ARGUMENT ERROR#C 7 = NO ARGUMENT FOUNDR C IERRF - RETURN STATUS TYPEC -1 = NO ARGUMENTN"C 0 = TERMINATOR FOUNDC 1 = ERRORVC CX IVAL = 0 INDEX = 0V IOPER = 0V NEXP = -1 "C SET VALUE FOR A LARGE NUMBER MVAL = 32000C SCAN PAST BLANKS"100 IF(ICOL .GT. MCOL) GO TO 960' IF(IN(ICOL) .NE. IBLNK) GO TO 200  ICOL = ICOL+1  GO TO 100RC CHECK FOR A TERMINATOR200 ICHAR = IN(ICOL) ISYMF = 0$ IF(ICHAR .EQ. IBLNK) GO TO 850$ IF(ICHAR .EQ. ICOMM) GO TO 850$ IF(ICHAR .EQ. ICTAB) GO TO 850C CHECK FOR AN OPERATOR NN = 0$ IF(ICHAR .EQ. IPLUS) GO TO 220# IF(ICHAR .NE. IMIN) GO TO 300E NN = 1220 IF(NEXP .EQ. 0) GO TO 930  NEXP = 0 IOPER = NN GO TO 800IC C CHECK FOR AN OPERANDCIC CHECK FOR NUMERIC 300 DO 310 I=1,10O' IF(ICHAR .EQ. IALPH(I)) GO TO 320 310 CONTINUE GO TO 500),C HAVE NUMERIC OPERAND - FIND TERMINATOR320 ICOLS = ICOL330 ICOL = ICOL+1  DO 340 I=1,13R* IF(IN(ICOL) .EQ. ITERM(I)) GO TO 350340 CONTINUE" IF(ICOL .LT. MCOL) GO TO 330350 ICOLF = ICOL-1 LL = 1 ICHAR = IN(ICOLF)$ IF(ICHAR .EQ. ICHRH) GO TO 420 IF(INBAS .GE. 1) GO TO 430 DO 410 LL=1,5 ( IF(ICHAR .EQ. NBASE(LL)) GO TO 420410 CONTINUE LL = 5 GO TO 430R420 ICOLF = ICOLF-12430 IFACT = NBASV(LL)  RFACT = IFACTE IVAL1 = 0- DO 480 LL=ICOLS,ICOLF  DO 450 I=1,IFACT( IF(IN(LL) .EQ. IALPH(I)) GO TO 460450 CONTINUE C CHECK IF CHECKED AS SYMBOL IF(ISYMF) 950,950,9400460 IVAL2 = I-1L IVAL1 = IVAL1*RFACT+IVAL2N480 CONTINUE ICOL = ICOL-1G GO TO 700F&C CHECK FOR PROGRAM COUNTER SYMBOL$500 IF(ICHAR .NE. IDOLR) GO TO 550 IVAL1 = IPCO GO TO 700=C CHECK FOR ASCII CHARACTER $550 IF(ICHAR .NE. IQUOT) GO TO 600 ICOL = ICOL+1 DO 560 LL=1,59+ IF(IN(ICOL) .EQ. IALPH(LL)) GO TO 570A560 CONTINUE GO TO 950)C GET CHARACTER VALUE570 ICOL = ICOL+1D' IF(IN(ICOL) .NE. IQUOT) GO TO 950 IVAL1 = IASCI(LL)  GO TO 700CC PROCESS SYMBOLSE600 ICOLS = ICOL CALL LABEL% GO TO(620,640,950,950,940),IERRBC HAVE VALID SYMBOLD620 ICOL = ICOL-1  GO TO 700 +C CHECK IF SYMBOL COULD BE A HEX NUMBER 640 IF(INBAS .NE. 2) GO TO 940 DO 650 I=11,16+ IF(IN(ICOLS) .EQ. IALPH(I)) GO TO 660 650 CONTINUE GO TO 940 660 ICOL = ICOLS ISYMF = 1  GO TO 330C C FORM EXPRESSION CI700 IF(NEXP .EQ. 1) GO TO 930  NEXP = 1 IF(IOPER .GE. 1) GO TO 720C ADDITION IVAL = IVAL+IVAL1  GO TO 740 C SUBTRACTION5720 IVAL = IVAL-IVAL1VC VALUE IS MODULO 65536O740 K = IVAL/65536. IVAL1 = KM IVAL = IVAL-IVAL1*65536. IF(IVAL .GE. 0.) GO TO 800 IVAL = IVAL+65536.C(800 ICOL = ICOL+1 " IF(ICOL .LE. MCOL) GO TO 200C -C CHECK FINAL VALUE AND SET RETURN STATUS CO$850 IF(IVAL .GE. 32768.) GO TO 910 MVAL = IVALE910 IF(NEXP .LE. 0) GO TO 930 IERR = 1 IERRF = 0$ IF(ICHAR .EQ. IBLNK) GO TO 990'C VALID RETURN, TERMINATOR IS COMMA IERR = 2 GO TO 990AC SYNTAX ERROR930 IERR = 4 GO TO 955VC UNDEFINED SYMBOL940 IERR = 5 GO TO 955GC ARGUMENT ERROR950 IERR = 6955 IERRF = 1C GO TO 990 C NO ARGUMENT FOUNDO960 IERR = 7 IERRF = -1 990 RETURN ENDO SUBROUTINE MEMRWC)C 6C THIS ROUTINE IS USED TO READ/WRITE DATA FROM THEC PROGRAM MEMORY@C THE CONTROL AND DATA BITS IN A MEMORY WORD ARE SHOWN BELOW8C BITS 0-7 MEMORY DATA BYTE OR PRESET I/O BYTE&C BIT 8 TRACE CONTROL BIT,C BIT 9 BREAK POINT CONTROL BIT(C BIT 10 PROTECT CONTROL BIT,C BITS 11-12 INPUT PORT CONTROL BITS-C BITS 13-14 OUTPUT PORT CONTROL BITS6C CRD INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL/@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)3; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,C *ENTRY PARAMETERSSC MDIR - READ/WRITE FLAGSC 0 = READC 1 = WRITE @C 2 = READ FOLLOWED BY WRITE AND CLEAR CONTROL FLAGS>C 3 = READ FOLLOWED BY WRITE AND SET CONTROL FLAGSC IMEM - BYTE TO WRITE,C IADD - MEMORY ADDRESSC ICFLG - CONTROL BIT INDEXRC 1 = TRACE FLAG!C 2 = BREAKPOINT FLAGRC 4 = PROTECT FLAG#C 8 = INPUT PORT STATUS3$C 32 = OUTPUT PORT STATUS C 64 = CLEAR I/O PORT5C IPFLG - PORT STATUS FOR SETTING MEMORY I/O PORTC C *EXIT PARAMETERSC IMEM - BYTE READO C NTRAF = UPDATED TRACE FLAG&C NBRKF = UPDATED BREADKPOINT FLAGC MPROT = PROTECT FLAGC IERR - ERROR STATUSC 0 = NO ERROR6C 1 = ATTEMPT TO WRITE TO PROTECTED MEMORYDC 2 = ATTEMPT TO ACCESS MEMORY ADDRESS LARGER THAN MXMEM9C 3 = ILLEGAL DATA ON MEMORY MAPPED I/O INPUT 8C 4 = TERMINATION ON MEMORY MAPPED I/O INPUTC C  MEMIO = 1U IF(INTRR .LE. 0) GO TO 50 C GET INTERRUPT INSTRUCTIONM ICBIT = 0 IMEM = INTRG(INTRR)  INTRR = INTRR+1A IERR = 0 GO TO 990 3C CHECK TO SEE IF ADDRESS EXCEEDS LEGAL MAXIMUM #50 IF(IADD .GE. MXMEM) GO TO 930T1C DETERMINE MEMORY PAGE NUMBER BEING ACCESSED  NPAGE = IADD/XSIZE:C SEE IF PAGE BEING ACCESSED IS CURRENTLY IN MEM ARRAY DO 60 IPAGE=1,3U+ IF(JPAG1(IPAGE) .EQ. NPAGE) GO TO 100A60 CONTINUEDC NEW PAGE NOT IN MEMORY, SWAP WITH PAGE LEAST RECENTLY ACCESSED LPAGE = JPAG3(3)& IF(JPAG2(LPAGE) .EQ. 0) GO TO 70 MPAGE = JPAG1(LPAGE) CALL INOUT(7) 70 JPAG1(LPAGE) = NPAGE<C CHECK TO SEE IF THIS PAGE HAS BEEN PREVIOUSLY ACCESSED J = NPAGE/8+1  K = 2**(NPAGE-(J-1)*8) ITEM3 = KPAGE(J)/K ITEM3 = ITEM3-(ITEM3/2)*2  IF(ITEM3 .NE. 0) GO TO 90M7C PAGE NOT PREVIOUSLY ACCESSED, INITIALIZE TO HALTS. KPAGE(J) = KPAGE(J)+KT J = (LPAGE-1)*MSIZE+1E K = J+MSIZE-1L DO 80 II=J,K MEM(II) = 118G80 CONTINUE JPAG2(LPAGE) = 1 GO TO 9590 MPAGE = NPAGE  CALL INOUT(6)  JPAG2(LPAGE) = 095 IPAGE = LPAGE &C UPDATE HISTORY OF PAGE ACCESSING100 I = IPAGE+ DO 102 K=1,3 J = JPAG3(K) JPAG3(K) = I I = J IF (IPAGE .EQ. J) GOTO 103 102 CONTINUE103 IERR = 0!C UPDATE PAGE WRITE INDICATORN IF(MDIR .EQ. 0) GO TO 105) JPAG2(I) = 18C SET INDEX INTO ICORE ARRAY FOR BYTE BEING ACCESSED105 REAL1 = IPAGE-1-NPAGEG! MIOAD = IADD+1.+REAL1*XSIZE) ITEM5 = MEM(MIOAD)C BREAK APART CONTROL BITS ITEM4 = ITEM5/256)'C MEMCT = MEMORY CONTROL BITS (ALL)H MEMCT = ITEM4*256=C ISOLATE I/O CONTROL BITS, INPUT AND OUTPUT CONTROL BITS  IOSTA = (ITEM4/8)*8I OUCTL = ITEM4/32 ITEM4 = ITEM4-OUCTL*32 INCTL = ITEM4/8T ITEM4 = ITEM4-INCTL*8EFC ICBIT = SINGLE BIT CONTROL FLAGS, BREAKPOINT, TRACE, AND PROTECT ICBIT = ITEM4D MPROT = ITEM4/4- ITEM4 = ITEM4-MPROT*4+ MBRKF = ITEM4/2M MTRAF = ITEM4-MBRKF*2P'C UPDATE TRACE AND BREAKPOINT FLAGS) IF(MBRKF .EQ. 0) GO TO 110 NBRKF = 1E 110 IF(MTRAF .EQ. 0) GO TO 120 NTRAF = 1N120 IF(ISIM .EQ. 0) GO TO 150 # IF(IADD .NE. NRADD) GO TO 150  IRAD = 1150 IF(MDIR .EQ. 1) GO TO 500TC READ MEMORY  IMEM = ITEM5-MEMCT IF(MDIR .NE. 0) GO TO 200AC CHECK FOR I/O PORT IF(INCTL .EQ. 0) GO TO 990 IF(ISIM .EQ. 0) GO TO 990  CALL IORW IMEM = IREGT IF(MHALT-2) 990,950,940PC SET OR CLEAR CONTROL BITSN!200 IF(ICFLG .EQ. 64) GO TO 450 IF(ICFLG .GE. 8) GO TO 400 K = ICBIT/ICFLG0 ITEM5 = ICBIT-K*ICFLGI K = (K/2)*2+(MDIR-2) ICBIT = K*ICFLG+ITEM55 GO TO 5101C SET I/O BITS AS SPECIFIEDT'400 ITEM5 = IOSTA-(IOSTA/ICFLG)*ICFLGM K = IOSTA/ICFLG. K = (K/4)*4+IPFLGC IOSTA = K*ICFLG+ITEM5L GO TO 5100C CLEAR I/O PORT450 IOSTA = 0  GO TO 510 C WRITE MEMORYBC DO NOT CHECK FOR PROTECT OR I/O IF CALLED BY COMMAND ROUTINE500 IF(ISIM .EQ. 0) GO TO 510 ( IF((MPROT+MPFLG) .EQ. 2) GO TO 920C CHECK FOR I/O PORT IF(OUCTL .EQ. 0) GO TO 510 MVAL = IMEMI CALL IORW5 GO TO 9901+510 MEM(MIOAD) = IOSTA*256+ICBIT*256+IMEMM GO TO 990IC MEMORY PROTECT ERROR920 IERR = 1 GO TO 990CC ADDRESS TOO LARGET930 IERR = 2 GO TO 990A+C ILLEGAL MEMORY MAPPED I/O INPUT VALUE 940 IERR = 3 GO TO 990T,C TERMINATION ON MEMORY MAPPED I/O INPUT950 IERR = 4990 MEMIO = 0O RETURN END+ SUBROUTINE IORW0C C -C THIS ROUTINE PERFORMS ALL SIMULATOR I/OOC0C D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILU@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)I; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,C *ENTRY PARAMETERSS'C ICOL - INPUT DATA BUFFER POINTERSC MDIR - I/O FLAGC 0 = INPUTMC 1 = OUTPUTC MVAL - VALUE TO OUTPUT C NREG - PORT NUMBERIAC MIOAD - LOCATION OF MEMORY I/O CONTROL WORD IN MEMORY ARRAYU7C MEMCT - MEMORY WORD CONTROL BITS (FOR MEMORY I/O)N"C MEMIO - MEMORY-PORT I/O FLAG"C 0 = REGULAR I/O PORT!C 1 = MEMORY I/O PORTOC SERIO - SERIAL I/O FLAG,CGC *EXIT PARAMETERSC IREGT - INPUT VALUEYC MHALT - INPUT STATUSC 0 = VALID INPUT +C 2 = USER TERMINATION ON INPUT$C 3 = INVALID USER INPUT/C INCTL = CONTROL BITS FOR MEMORY INPUT I/O 0C OUCTL - CONTROL BITS FOR MEMORY OUTPUT I/O-C IOTAB - PORT CONTROL TABLE FOR PORT I/OO"C 0 = INPUT STREAM I/O%C 1 = STANDARD DEVICE I/O $C 2 = PRESET/LATCHED I/O"C 3 = INPUT BUFFER I/O1C ICOL - UPDATED TO POINT TO NEXT DATA VALUERC CNC FORM INSTRUCTION ADDRESS IVAL = IAR NHEXF = 1U INDET = 1  CALL AVHEX INDET = 2 C CHECK FOR MEMORY I/O IF(MEMIO .EQ. 1) GO TO 50FC CHECK FOR SERIAL I/O IF(SERIO .EQ. 1) GO TO 55UC FORM PORT NUMBER NHEXF = 0E IVAL = NREG  CALL AVHEX MH1 = NH1  MH2 = NH2NC GET I/O CONTROL WORD REAL1 = NREG PORTN = REAL1+65536. LPORT = NREG+MDIR*256+1P NN = IOTAB(LPORT)/256A GO TO 60C FORM MEMORY PORT NUMBER 50 IVAL = IADD  CALL AVHEXC GET MEMORY I/O CONTROL PORTN = IADD NN = INCTL IF(MDIR .EQ. 0) GO TO 500G NN = OUCTL GO TO 60C FETCH SERIAL I/O CONTROL55 NN = SERCT-(SERCT/4)*4 IF(MDIR .EQ. 0) GO TO 500E NN = SERCT/2 PORTN = 65792.C CHECK FOR INPUT OR OUTPUTT60 IF(MDIR .EQ. 0) GO TO 500 CO C PROCESS OUTPUT INSTRUCTIONCGC LATCH OUTPUT DATAI IF(MEMIO .EQ. 1) GO TO 70 IF(SERIO .EQ. 1) GO TO 750 IOTAB(LPORT) = MVAL+NN*256 GO TO 80#C DON'T WRITE OVER PRESET INPUT !C 70 IF(INCTL .EQ. 0) GO TO 80070 MEM(MIOAD) = MEMCT+MVAL GO TO 8075 SOD = MVAL!C CHECK IF LATCHED VALUE ONLYC80 IF(NN .EQ. 0) GO TO 990O IOOUT = ISPRTS IF(NN .NE. 2) GO TO 100  IOOUT = IOPRTRC OUTPUT VALUE100 IVAL = MVAL0 NHEXF = 0C INDET = 3C CALL AVHEX IF(MEMIO .EQ. 1) GO TO 120 IF(SERIO .EQ. 1) GO TO 130; WRITE(IOOUT,10010) (IADDR(1,I),I=1,4),MH1,MH2,NH1,NH2T810010 FORMAT(2H *,4A1,16H OUTPUT ON PORT ,2A1,3H = ,2A1) GO TO 9908G120 WRITE (IOOUT,10030) (IADDR(1,I),I=1,4),(IADDR(2,I),I=1,4),NH1,NH2 @10030 FORMAT(2H *,4A1,23H OUTPUT ON MEMORY PORT ,4A1,3H = ,2A1) GO TO 990S/130 WRITE(IOOUT,10035) (IADDR(1,I),I=1,4),NH2O/10035 FORMAT(2H *,4A1,17H SERIAL OUTPUT = ,A1)  GO TO 990 CNC PROCESS INPUT INSTRUCTION CM500 MHALT = 2O(C FETCH PRESET VALUE FROM PORT TABLE IF(MEMIO .EQ. 1) GO TO 510 IF(SERIO .EQ. 1) GO TO 515! IREGT = IOTAB(LPORT)-NN*256A GO TO 515 $C FETCH PRESET VALUE FROM MEMORY510 IREGT = IMEM515 IF(NN .EQ. 0) GO TO 7500 IF(NN .LE. 2) GO TO 600 !C READ INPUT FROM DATA TABLES $C SEE IF PORT NUMBER IS IN TABLE DO 525 IP=1,8H( IF(PORTN .EQ. RDATP(IP)) GO TO 528525 CONTINUE GO TO 580$528 IF(IDATP(IP) .LT. 0) GO TO 580 NPNT = IDATP(IP)530 NPNT = NPNT+1O# IF(NPNT .LE. NDATA) GO TO 540G NPNT = 1540 K = IDATT(NPNT)5# IF((K/256) .NE. IP) GO TO 530A MVAL = K-(K/256)*256 IDATP(IP) = NPNT GO TO 700 C NO DATA FOR PORT580 MESSN = 21 IREGT = IREGAT IF(IBAT+MREAD) 690,690,590590 MHALT = 0E GO TO 690IC READ INPUT600 IOOUT = ISCRD C CHECK MODE IF(IBAT.NE.0) GO TO 630E IF(NN .NE. 2) GO TO 620A IOOUT = IOCRD5$ IF(IOOUT .NE. ISCRD) GO TO 630620 NHEXF = 1 IF(MEMIO .NE. 0) GO TO 625 IF(SERIO .NE. 0) GO TO 6283 WRITE(IOPRT,10020) (IADDR(1,I),I=1,4),MH1,MH2=310020 FORMAT(2H *,4A1,15H INPUT ON PORT ,2A1,3H = )0 GO TO 640 ?625 WRITE (IOPRT,10040) (IADDR(1,I),I=1,4),(IADDR(2,I),I=1,4)R:10040 FORMAT(2H *,4A1,22H INPUT ON MEMORY PORT ,4A1,3H = ) GO TO 640 ,628 WRITE (IOPRT,10045) (IADDR(1,I),I=1,4)*10045 FORMAT(2H *,4A1,16H SERIAL INPUT = ) GO TO 640U'C CHECK FOR ADDITIONAL DATA ON LINE "630 IF(ICOL .GT. MCOL) GO TO 640 ICOL = ICOL+15' IF(IN(ICOL) .EQ. IBLNK) GO TO 630 ' IF(IN(ICOL) .EQ. ICTAB) GO TO 630, GO TO 660T640 ICOL = 1 CALL INOUT(5)  IF(IERR .EQ. 1) GO TO 990 660 CALL SCAND IF(IERRF) 990,700,6701C HAVE AN ERROR CHECK MODE 670 IF(NHEXF .NE. 0) GO TO 620 MESSN = 22 MHALT = 3T690 CALL MESSI GO TO 990OC CHECK VALUEE!700 IF(MVAL .GE. 256) GO TO 670 IF(SERIO .EQ. 0) GO TO 710 IF(MVAL .GT. 1) GO TO 670 710 IREGT = MVALCC LATCH INPUT VALUE IN PORT TABLE OR MEMORY MAPPED I/O LOCATION IF(SERIO .EQ. 1) GO TO 745 IF(MEMIO .EQ. 0) GO TO 740 MEM(MIOAD) = MEMCT+MVAL1 GO TO 750 740 IOTAB(LPORT) = MVAL+NN*256 GO TO 750A745 SID = MVAL750 MHALT = 0E990 IERR = 0 RETURN END  SUBROUTINE FUNCACMCI0C THIS ROUTINE IS USED TO FORM THE FUNCTIONS-C AND,OR,XOR OR BREAK A BYTE INTO 8 BITS.)C C7D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL2@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)R; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,C *ENTRY PARAMETERSSC IFUNC - FUNCTION CODEDC 1 = LOGICAL ANDPC 2 = LOGICAL ORC 3 = EXCLUSIVE ORC 4 = FORM BITSOC IOPR - ARGUMENT 1C IOPR2 - ARGUMENT 2C C *EXIT PARAMETERS!C MVAL - RESULT OF OPERATION "C IBIT1 - 8 BITS OF ARGUMENT 2CMCFC SET UP FOR OR N1 = 1 N2 = 2 IF(IFUNC-2) 100,500,200D C AND 100 N1 = 2 GO TO 5003 C XOR4 200 N2 = 1C FORM FUNCTION500 ND = 128 IV1 = IOPR IV2 = IOPR2D MVAL = 0 DO 520 I=1,8 IB1 = IV1/ND IB2 = IV2/ND IV1 = IV1-IB1*ND IV2 = IV2-IB2*ND IBIT1(I) = IB2 IB1 = IB1+IB2R IF(IB1 .LT. N1) GO TO 510E IF(IB1 .GT. N2) GO TO 510T MVAL = MVAL+ND510 ND = ND/22520 CONTINUE RETURN END= SUBROUTINE AVHEXCICC4C THIS ROUTINE CONVERTS A VALUE INTO TWO OR FOUR6C HEXADECIMAL CHARACTERS. VALUES OUT OF RANGE AREC RETURNED AS ASTERISKS.CC  DIMENSION IHCHA(2)D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILT@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)I; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ3 EQUIVALENCE (IHCHA(1),IHCH1),(IHCHA(2),IHCH2)MCSC *ENTRY PARAMETERSIC IVAL - VALUE TO CONVERTC NHEXF - CONVERSION FLAG, C 0 = CONVERT A BYTE'C 1 = CONVERT A DOUBLE BYTEI,C INDET - INDEX IN ARRAY TO STORE RESULTCEC *EXIT PARAMETERS,C IADDR(INDET, ) - RESULTS OF CONVERSION6C NH1 - CONTAINS NEXT TO LOW ORDER HEX CHARACTER.C NH2 - CONTAINS LOW ORDER HEX CHARACTERC1C, IF(IVAL .LT. 0.) GO TO 200 IHCH1 = IVAL/256.  IVAL1 = IHCH1A IHCH2 = IVAL-IVAL1*256.SC CHECK RANGEM* IF(IHCH1 .GT. (NHEXF*255)) GO TO 200C FORM CHARACTERSA K = 0  DO 100 I=1,2 K = K+1  NH1 = 1+IHCHA(I)/16I! NH2 = IHCHA(I)-(NH1-1)*16+1T" IADDR(INDET,K) = IALPH(NH1) K = K+1(! IADDR(INDET,K) = IALPH(NH2) 100 CONTINUE GO TO 300OC VALUE OUT OF RANGE200 DO 210 I=1,4 IADDR(INDET,I) = IAST210 CONTINUE300 NH1 = IADDR(INDET,3) NH2 = IADDR(INDET,4) RETURN ENDV SUBROUTINE EQUATC CGAC THIS ROUTINE EQUATES A LOGICAL DEVICE NUMBER TO A FILE NAMER<C SO THAT AN OBJECT MODULE MAY BE READ FROM A DISK FILE.=C THIS ROUTINE MAY HAVE TO BE CHANGED FOR SOME COMPUTERS.A)C SEE THE OPERATION NOTES FOR DETAILSC CA DIMENSION INC(80)  LOGICAL*1 JNAME(18) DO 1212 L=1,181212 JNAME(L)="40ED INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFILO@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)); COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZ& EQUIVALENCE(IN(1),INC(1)),(ICOL,JCOL)CC *ENTRY PARAMETERSO,C IN - BUFFER THAT CONTAINS FILE NAME%C ICOL - STARTING COLUMN OF SCAN)"C IDEV - STANDARD UNIT NUMBER!C IFIL - I/O NUMBER FOR FILE,CLC *EXIT PARAMETERS4C NAMEF - CONTAINS FILE NAME IN PACKED HOLLERITH6C IPBUF - CONTAINS FILE NAME IN UNPACKED A1 FORMAT(C ICOL - ENDING COLUMN OF FILE NMAE-C IPBUF - CONTAINS FILE NAME IN A1 FORMAT,C IERR - RETURN STATUSP"C 0 = VALID FILE FOUND C 1 = FILE NOT FOUND C 2 = ARGUMENT ERROR-C IFIL - DEVICE NUMBER FOR I/O OPERATIONC/C IF NEGATIVE IMPLIES I/O WITH FILEN.C IDEV - SAME AS IFIL BUT ALWAYS POSITIVEC,CLC CHECK IF STANDARD DEVICECE! IF(ICOL .GT. MCOL) GO TO 10L% IF(IN(ICOL) .NE. IAST) GO TO 20E ICOL = ICOL+1T' IF(IN(ICOL) .NE. IBLNK) GO TO 920E10 IFIL = IDEVT GO TO 900 CFC CHECK IF I/O UNIT NUMBERCP20 KCOL = ICOL CALL SCAN IF(IERRF .NE. 0) GO TO 100C HAVE I/O UNIT NUMBER IFIL = MVAL  IDEV = MVALM GO TO 900TCCC :C THE FOLLOWING CODE PACKS THE FILE NAME INTO AN ARRAY<C IN A PACKED HOLLERITH FORMAT WHICH IS TYPICALLY NEEDED6C WHEN EQUATING A FILE NAME. THE PACKED FILE NAME:C IS IN ARRAY NAMEF AND CONSISTS OF 4 WORDS WITH BLANK8C FILL. THE FILE NAME IN AN UNPACKED FORMAT (A1) ISC IN ARRAY IPBUF.FC 100 K=1  NDIV=2**(ISBIT-ICHBT) JCOL=KCOL<110 IF((INC(JCOL).EQ.IBLNK).OR.(INC(JCOL).EQ.ICOMM))GOTO 200 IF(INC(JCOL).EQ.ICTAB)GOTO 200  IF(K.GT.18)GOTO 920 JNAME(K)=INC(JCOL) IPBUF(K)=INC(JCOL)N K=K+1 JCOL=JCOL+1 GOTO 110N200 JNAME(K)=IBLNK IPBUF(K)=IBLNKO IIQ=LENSTR(JNAME,18)  JNAME(IIQ+1)="56 ! "."  JNAME(IIQ+2)="117 ! "O"L JNAME(IIQ+3)="102 ! "B"A JNAME(IIQ+4)="123 ! "S" IIQ=IIQ+4 CALL CLOSE(IFIL)L CALL ASSIGN(7,JNAME,IIQ)T IDIV=IFIL IFIL= -IFILC VALID RETURN 900 IERR=0 GOTO 990CC FILE NOT FOUND 910 IERR=1 GOTO 990LC ARGUMENT ERROR 920 IERR=2 GOTO 990( 990 RETURN END SUBROUTINE MESS)COC0<C THIS ROUTINE IS USED TO OUTPUT ANY SIMULATOR MESSAGES.8C IF IN INTERACTIVE MODE AND WRITING TO AN ALTERNATE6C DEVICE MESSAGES WILL BE WRITTEN TO BOTH DEVICES.CQC=D INTEGER ZERO,PARTY,CARRY,OUCTL,EADDV,SERIO,SERCT,SID,SOD,PTYPE& REAL IVAL,IVAL1,IVAL2,ITABV(200)6 REAL IPC,IAR,ISP,ICYCT,IHISB(32),IPCS,LIMIT,IADD& REAL IDFRM,IDTO,NRADD,MXMEM,IOPAC COMMON ICRD,IPRT,IRDR,IOCRD,IOPRT,IORDR,ITERC,ITERP,IDEV,IFIL9@ COMMON IFILC,IFILP,IFILR,ICREC,IRREC,ICOL,IN(80),MCOL,MDIVB COMMON IBAT,IOOUT,IERR,NERR,MDIR,MESSN,NUMB,IBIT,ICCNT,IWORD= COMMON IECHO,IERRF,IADDR(7,4),IPBUF(20),MREAD,NAMEF(10)I; COMMON MHALT,NREG,NULAB,LIMIT,ISCRD,ISPRT,ICHBT,ICHWDR4 COMMON ISBIT,NCCOM,IDIF,INBAS,IVAL,IVAL1,IVAL2< COMMON ITAB(3,200),ITABV,INDEX,INDET,LTAB,MLAB,NAME(3)C COMMON IOTAB(512),IBIT1(8),ICFLG,ICHAR,IDFRM,IDTO,IDFMT,IFUNC C COMMON IHCTL,IHVAL,ITEM1,ITEM2,MVAL,NCFLG,NDISF,NH1,NH2,NHEXF 2 COMMON INTRG(4),INTCY,INTTP,INTRR,INTP,INTED? COMMON IOPN,IOPA,IOPR,IOPR2,IEAD,IDESD,IEFF,ICC,ISOR,IDEST: COMMON ITYPE,IBYTE,ICYC,ICYCD,MDTAB,NDLAY,IBUG,NPORT- COMMON IPCS,IADD,IMEM,MIOAD,EADDR,EADDV,8 COMMON IOP,IOP2,IOP3,INCTL,OUCTL,MEMCT,MEMIO,IPFLG< COMMON IREGB,IREGC,IREGD,IREGE,IREGH,IREGL,IREGM,IREGA8 COMMON ZERO,CARRY,PARTY,KSIGN,IDC,IMASK,INTE,INT75> COMMON SID,SOD,SERIO,SERCT,PTYPE,ICYCT,ISP,IPC,IAR,IREGTA COMMON MXHIS,IHISP,IHISB,IDATP(8),RDATP(8),IDATT(100),NDATA,9 COMMON IBLNK,ICOMM,ICTAB,IPLUS,IMIN,IAST,IDIV,ICOLNO9 COMMON IQUOT,IDOLR,ICAT,ISHRP,IEQUL,ISEMI,IALPH(59)EB COMMON MTFLG,MBFLG,MPFLG,NTRAF,NBRKF,MTRAF,MBRKF,MSIZE,XSIZEC COMMON MXMEM,MEM(1536),IMFLE,IMREC,IRLEN,INUM,NRADD,IRAD,ISIMF= COMMON JPAG1(3),JPAG2(3),JPAG3(3),KPAGE(64),LPAGE,MPAGEA COMMON INTIPZC,C *ENTRY PARAMETERSSC MESSN - MESSAGE NUMBER$C IBAT - BATCH/INTERACTIVE FLAGCIC *EXIT PARAMETERS)C MESSAGE IS WRITTEN TO OUTPUT DEVICEDC,C  NN = IOPRT510 GO TO(100,200,300,400,500,600,700,800,900,1000,U5 1 1100,1200,1300,1400,1500,1600,1700,1800,1900,N' 2 2000,2100,2200,2300,2400),MESSNFCIC SYNTAX ERROR100 WRITE(NN,110)F#110 FORMAT(18H *** SYNTAX ERROR) GO TO 9000C UNDEFINED SYMBOL200 WRITE(NN,210)'210 FORMAT(22H *** UNDEFINED SYMBOL)R GO TO 9000C ARGUMENT ERROR300 WRITE(NN,310)T%310 FORMAT(20H *** ARGUMENT ERROR)  GO TO 9000C MISSING OPERAND400 WRITE(NN,410)P&410 FORMAT(21H *** MISSING OPERAND) GO TO 9000C SYMBOL ERROR500 WRITE(NN,510)7#510 FORMAT(18H *** SYMBOL ERROR)0 GO TO 9000C VALUE OUT OF RANGE600 WRITE(NN,610))610 FORMAT(24H *** VALUE OUT OF RANGE)  GO TO 9000C CHECKSUM ERROR700 WRITE(NN,710) %710 FORMAT(20H *** CHECKSUM ERROR)  GO TO 9000C END OF FILE ENCOUNTERED(800 WRITE(NN,810)T.810 FORMAT(29H *** END OF FILE ENCOUNTERED) GO TO 9000C SYMBOL TABLE FULL900 WRITE(NN,910) (910 FORMAT(23H *** SYMBOL TABLE FULL) GO TO 9000C INVALID COMMAND 1000 WRITE(NN,1010)&1010 FORMAT(21H *** INVALID COMMAND) GO TO 9000C ADDRESS OUT OF RANGE1100 WRITE(NN,1110)+1110 FORMAT(26H *** ADDRESS OUT OF RANGE)E GO TO 9000C LIMIT REACHEDT1200 WRITE(NN,1210)$1210 FORMAT(19H *** LIMIT REACHED) GO TO 9000C SYMBOL FORMAT ERROR 1300 WRITE(NN,1310)*1310 FORMAT(25H *** SYMBOL FORMAT ERROR) GO TO 9000C FILE NOT FOUND1400 WRITE(NN,1410)%1410 FORMAT(20H *** FILE NOT FOUND) GO TO 9000*C NUMBER OF BYTE READ IN OBJECT MODULE1500 WRITE(NN,1510) NUMB 11510 FORMAT(28H *** NUMBER OF BYTES READ = ,I5)T GO TO 9000C TERMINATOR ERROR1600 WRITE(NN,1610)'1610 FORMAT(22H *** TERMINATOR ERROR)R GO TO 9000C INVALID CHARACTERE1700 WRITE(NN,1710)(1710 FORMAT(23H *** INVALID CHARACTER) GO TO 9000C INVALID OPERANDF1800 WRITE(NN,1810)&1810 FORMAT(21H *** INVALID OPERAND) GO TO 9000C INVALID ELEMENTN1900 WRITE(NN,1910)&1910 FORMAT(21H *** INVALID ELEMENT) GO TO 9000C ILLEGAL INSTRUCTION 2000 WRITE(NN,2010)*2010 FORMAT(25H *** ILLEGAL INSTRUCTION) GO TO 9000"C DATA TABLE FILLED OR NO DATA2100 WRITE(NN,2110)'2110 FORMAT(22H *** DATA TABLE ERROR)  GO TO 9000C INVALID INPUT 2200 WRITE(NN,2210))2210 FORMAT(24H *** INVALID INPUT DATA)I GO TO 9000=C ATTEMPT TO WRITE TO A MEMORY LOCATION THAT IS PROTECTEDO2300 WRITE(NN,2310)32310 FORMAT (33H *** WRITING TO PROTECTED MEMORY)* GO TO 9000C INTERRUPT RECOGNIZED2400 WRITE(NN,2410)+2410 FORMAT(26H *** INTERRUPT RECOGNIZED)EC CT 9000 IF(IBAT .NE. 0) GO TO 9900" IF(NN .EQ. ITERP) GO TO 9900 NN = ITERP GO TO 10 9900 RETURN END GO TO 9000C INVALID INPUT 2200 WRITE(NN,2210))2210 FORMAT(24H *** INVALID INPUT DATAFOR INT,LI:INT=INTMAC DELETE,LI:DELETE=DELETEMAC LENSTR,LI:LENSTR=LENSTR"SY:INT/CP,MP:INT=INT,LENSTR,DELETE/ MAXBUF=512UNITS=18 ACTFIL=10ASG=SY0:4:7:8:18//% .TITLE LENSTR (ARRAY,MAXLEN);+; LENSTR.MAC - 3/21/78%; SOUTH COBB - PROJECT NUMBER 7701008*; RSX-11M BL22 V3.1/PROJECT COMMON ROUTINE0; M.SORRELL - 3/21/78 REV. 9/14/78 RD VICKERS,; FUNCTION: ACCEPTS AN ARRAY AND COUNTS THEC; NUMBER OF CHARACTERS IN THE INPUT STRING. RESULT IS @; REACHED BY COUNTING RIGHT TO LEFT UNTIL A CHARACTER@; OTHER THAN "0 (NULL) OR "40 (SPACE) IS ENCOUNTERED.8; RESULT RETURNED (NUM) IS NEVER LESS THAN 1.@; CALLING STRUCTURE: LENSTR.MAC IS A FORTRAN CALLABLE FUNCTION.3; IT MAKES NO SUBROUTINE CALLS.-@; CALLING PROCEDURE/PARAMETER LIST: FORTRAN CALL IN THE FORM: '; NUM = LENSTR(ARRAY,MAXLEN)SC; ARRAY IS A LOGICAL STRING OF LENGTH MAXLEN (INTEGER). P&; RESULT IS RETURNED IN R0.;-'LENSTR:: CLR R0 A5 MOV 2(R5),R2 ;ARRAY ADDRESSI6 MOV 4(R5),R3 ;MAXLEN ADDRESS? ADD (R3),R2 ;MAXLEN+ADDRESS OF ARRAYA8 MOV 2(R5),R3 ;STARTING ADDRESS6LOOP: DEC R2 ;WORK BACKWARDS4 CMP R3,R2 ;END OF DATA?7 BEQ HERE ;BRANCH IF EQUALG: CMPB (R2),#0 ;IS CHARACTER NULL?: BNE THERE ;BRANCH IF NOT NULL< BR LOOP ;CHECK NEXT CHARACTER=THERE: CMPB (R2),#40 ;IS CHARACTER A SPACE? ; BNE HERE ;BRANCH IF NOT SPACE5A BR LOOP ;BRANCH FOR NEXT CHARACTER HHERE: INC R2 ;INCREMENT START ADDR+MAXLEN BY 1H SUB R3,R2 ;SUBTR START ADDR TO FIND RESULT 7 MOV R2,R0 ;MOVE FOR RETURN . RTS PC ;RETURN .END LOOP ;CHECK NEXT CHARACTER=THERE: CMPB (R2),#40 ;IS CHARACTER A S% .TITLE DELETE SUBROUTINE FOR FORTRAN;; FORTRAN CALL; CALL DELETE(LUN,ERR);; WHERE LUN=LOGICAL UNIT NUMBER; RETURN ;ERR=FCS ERROR CODE FROM FDB.;; NOTE5; FILE MUST BE OPEN OR FDBSET AND ASSIGN MUST BE USED; .MCALL DELET$ .GLOBL $FCHNL,$OTSV .ENABL LSBDELETE::MOV @2(R5),R2 MOV @#$OTSV,R3 JSR PC,$FCHNL MOV R0,R1 ADD #14,R0 DELET$ R0 BCS ERR MOV #66,R0 1$: CLR(R1)+ DEC R0 BNE 1$2$: MOV R0,@4(R5) RTS PCERR: MOVB F.ERR(R0),R0 BR 2$ .DSABL LSB  .ENDSUBROUTINE FOR FORTRAN;; FORTRAN CALL; CALL DELETE(LUN,ERR);; WHERE LUN=LOGICAL UNIT NUMBER; RETURN ;ERR=FCS ERROR CODE FROM FDB.;; NOTE5; FILE MUST BE OPEN OR FDBSET AND ASSIGN MUST BE USED; .MCALL DELET$ .GLOBL $FCHNL,$OTSV .ENABL LSBDELETE::MOV @2(R5),R2 MOV @#$OTSV,R3 JSR PC,$FCHNL MOV R0,R1 ADD #14,R0 DELET$ R0 BCS ERR MOV #66,R0 1$: CLR(R1)+ DEC R0 BNE 1$2$: MOV R0,@4(R5) RTS PCERR: MOVB F.ERR(R0),R0 BR 2$ .m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶