{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: FILEMAP)}}
====== FILEMAP ======
(George Source)
**Macros used:** [[george:macro:ALTLEND|ALTLEND]], [[george:macro:ALTLENG|ALTLENG]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:FILENUMB|FILENUMB]], [[george:macro:GEOERR|GEOERR]], [[george:macro:MAPBDEL|MAPBDEL]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:NOBITS|NOBITS]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SFMAP|SFMAP]], [[george:macro:SXFCB|SXFCB]], [[george:macro:TRACE|TRACE]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]]
22FL #OPT K6FILEMAP=K6ALLGEO>K6FILESTORE
22^= #OPT K0FILEMAP=K0ALLGEO>K0FILESTORE
23DW #LIS K0FILEMAP
23YG #SEG FILEMAP [ TONY HAMILTON
24D6 8HFILEMAP
24XQ [
25CB SEGENTRY K1FILEMAP,XMAPBINS
25X2 SEGENTRY K21FILEMAP,ZMAPBINS
26BL #
26W= # USE OF WORKING SPACE
27*W # AWORK1 =NO OF BITS TO BE INSERTED
27TG # AWORK2 =NO OF BIT BEFORE WHICH BITS ARE TO BE INSERTED
28*6 # AWORK3 =FILE DEPTH
28SQ NOBITS
29#B NOBIT
29S2 GEOERR 1,MAPBIT?? [PARAMETERS FOR MAPBIN WRONG.
2=?L MODBIT
2=R= GEOERR 1,FMAPP??? [NO FMAPP BLOCK.
2?=W SFMAP
2?QG #HAL FILE+FMAPP,0
2#=6 #
2#PQ # MAPBIN INSERTS [EXEC1] BITS BEFORE THE [EXEC2]TH BIT IN THE
2*9B # FMAPP BLOCK OF THE FILE AT DEPTH [EXEC3].THESE BITS ARE SET.
2*P2 #
2B8L # WE VALIDATE THE PARAMETERS,FIND THE FMAPP BLOCK,UPDATE FBCOMM &
2BN= # FBITMOD,AND ALTLEN THE FMAPP BLOCK IF NECESSARY.
2C7W #
2CMG # IN THE COMMENTS WE USE THE FOLLOWING TERMINOLOGY:
2D76 #
2DLQ # "THE INSERT BIT" IS THE BIT BEFORE WHICH WE ARE INSERTING THE
2F6B # NEW BIT
2FL2 #
2G5L # WN IS THE WORD IN WHICH THE INSERT BIT IS IN ON ENTRY
2GK= # BN IS THE BIT IN WN WHICH IS THE INSERT BIT (RANGE 1-24)
2H4W # WNM IS THE WORD IN WHICH THE INSERT BIT ENDS UP IN
2HJG # BNM IS THE BIT IN WNM WHERE THE INSERT BIT ENDS UP.
2J46 # W1 IS THE INITIAL SIZE OF THE MAP IN WORDS -1
2JHQ # W2 IS THE FINAL SIZE OF THE MAP IN WORDS-1
2K3B #
2KH2 SFINDMAP
2L2L # REQUIRES AWORK3 TO HOLD FILE DEPTH
2LG= # GIVES X1->MAP
2L^W # X0 DESTROYED X7=LINK
2MFG SMO FX2
2M^6 LDX 0 AWORK3
2NDQ SXFCB 0,1 [GET X1->FCB
2NYB LDX 1 FPTR(1)
2PD2 SFLOOP
2PXL LDX 1 FPTR(1)
2QC= BXE 1 CXFI,MODBIT
2QWW LDX 0 ATYPE(1)
2RBG BXE 0 FILEPLUSFCB,MODBIT
2RW6 SMO FX1
2S*Q TXU 0 SFMAP
2STB BCS SFLOOP [CHECK FOR FMAP
2T*2 EXIT 7 0
2TSL [
2W#= ZMAPBINS [TOP LEVEL FILE
2WRW [
2X?G STOZ AWORK3(2)
2XR6 BRN MERJMAP
2Y=Q [
2YQB XMAPBINS
2^=2 [
2^PL LDX 6 ACOMMUNE9(2) [PICK UP FILE DEPTH
329= BPZ 6 POS [J.UNLESS NEGATIVE DEPTH GIVEN
32NW FILENUMB 0 [GET X0=NO OF FILES OPEN
338G ADX 6 0
33N6 POS
347Q STO 6 AWORK3(2) [SET POSITIVE FILE DEPTH
34MB MERJMAP
3572 LDX 0 ACOMMUNE7(2)
35LL BZE 0 NOBITS [ERROR IF NONE OR TOO MANY
366= BXGE 0 BSBS,NOBITS
36KW STO 0 AWORK1(2) [SET NO. OF BITS TO BE INSERTED
375G LDX 0 ACOMMUNE8(2)
37K6 BZE 0 NOBITS
384Q BXGE 0 BSBS,NOBITS [ERROR IF NONE OR TOO MANY
38JB #SKI K6FILEMAP>99$99
3942 TRACE 0,BIT INS
39HL STO 0 AWORK2(2) [SET BIT ADDRESS
3=3= CALL 7 SFINDMAP
3=GW #SKI K6FILEMAP>299$299
3?2G BLOCKTRA 1,FMAP1
3?G6 LDN 5 3
3?^Q ORS 5 FBCOMM(1) [SET CAREFUL MODE MARKER FOR CLOSE
3#FB LDX 5 FBITMOD(1)
3#^2 #SKI K6FILEMAP>99$99
3*DL TRACE 5,FBITMOD
3*Y= BNG 5 MODBIT [ERROR IF NEGATIVE
3BCW BXGE 5 BSBS,NOBITS [ERROR IF TOO LARGE
3BD2 ...#SKI 1 [CORRECTION FOR B3932: REPLACES REST OF CHAPTER
3BD6 ...(
3BD= ...[ THIS METHOD ROUNDS UP THE NUMBER OF BITS TO BE INSERTED(N) TO A MULTIP
3BDB ...[OF 24. THEN DOES MAPBDELS IN A LOOP TO DELETE THE EXTRA BITS
3BDG ...[ W IS THE ADDRESS RELATIVE TO FBITS OF THE WORD CONTAINING THE 1ST NEW
3BDL ...[ D IS THE ADDRESS RELATIVE TO FBITS OF THE LAST WORD IN THE EXTENDED MA
3BDQ ...[ X IS NUMBER OF BITS IN W BEFORE INSERT POSITION
3BDW ...[ AWORK4 HOLDS THE ROUNDING FACTOR
3BF2 ...# NOTE WELL: WE DO NOT USE B0 OF FBITS.[FBITMOD]= NO OF BLOCKS IN
3BF6 ...# THE FILE,I.E. THE NUMBER OF SIGNIFICANT BITS.THUS WHEN WE DIVIDE
3BF= ...# [FBITMOD]BY 24,IF IT IS AN EXACT MULTIPLE,THE LAST BIT GOES INTO
3BFB ...# THE LAST WORD ON ITS OWN.
3BFG ... ADN 5 1
3BFL ... BXL 5 AWORK2(2),MODBIT [ERROR IF AWORK2>FBITMOD+1
3BFQ ... STOZ AWORK4(2)
3BFW ... LDX 6 AWORK1(2) [N
3BG2 ... TRACEIF K6FILEMAP,199,199,6,FILEMAPN
3BG6 ... LDN 5 24
3BG= ... DVS 5 5 [X6 HAS NUMBER OF WHOLE WORDS
3BGB ... BZE 5 ROUNDNUMBER [J IF NO REMAINDER
3BGG ... ADN 6 1 [ROUND UP X6
3BGL ... SBN 5 24
3BGQ ... NGX 5 5 [GET ROUNDING FACTOR
3BGW ... ADS 5 AWORK1(2) [ROUND UP N
3BH2 ... STO 5 AWORK4(2) [SAVE ROUNDING FACTOR
3BH6 ...ROUNDNUMBER
3BH= ... TRACEIF K6FILEMAP,99,199,6,FILEMAPP
3BHB ... LDX 5 AWORK1(2)
3BHG ... ADX 5 FBITMOD(1) [NEW SIZE OF MAP IN BITS
3BHL ... STO 5 FBITMOD(1) [UPDATE FBITMOD
3BHQ ... TRACEIF K6FILEMAP,99,,5,FBITMODN
3BHW ... LDN 4 24
3BJ2 ... DVS 4 4 [X5=D
3BJ6 ... TRACEIF K6FILEMAP,99,199,5,FILEMAPD
3BJ= ... SMO 5
3BJB ... LDN 4 FBITS-A1+1 [REQUIRED LOGICAL LENGTH
3BJG ... BXE 4 ALOGLEN(1),NOALTLEN [J IF BLOCK BIG ENOUGH
3BJL ... LDX 3 1 [FMAPP ADDRESS
3BJQ ... ALTLENG 3,4,SFMAPP
3BJW ... CALL 7 SFINDMAP
3BK2 ...NOALTLEN
3BK6 ...#SKI K6FILEMAP>199$199
3BK= ...(
3BKB ... LDX 0 ALOGLEN(1)
3BKG ... ADN 0 2
3BKL ... BLOCKTRA 1,BEFORE,0
3BKQ ...)
3BKW ... LDX 4 AWORK2(2) [POSITION FOR INSERT
3BL2 ... LDN 3 24
3BL6 ... DVS 3 3 [X4=W: X3=X
3BL= ... TRACEIF K6FILEMAP,99,199,3,FILEMAPX
3BLB ... TRACEIF K6FILEMAP,99,199,4,FILEMAPW
3BLL ... LDX 7 5
3BLQ ... SBX 7 6
3BLW ... SBX 7 4 [D-P-W
3BM2 ... BZE 7 NOWORDMOVE [W IS LAST WORD OF MAP
3BM6 ... BNG 7 NDOFFILE [J IF APPEND &N A MULTIPLE OF 24
3BM= ... LDX 2 5
3BMB ... SBX 2 6 [D-P
3BMG ... STO 1 GEN1 [SAVE FMAPP ADDRESS
3BML ...MOVEWORD
3BMQ ... SMO 2 [D-P
3BMW ... LDX 0 FBITS(1) [OLD LAST WORD
3BN2 ... SMO 5 [D
3BN6 ... STO 0 FBITS(1) [NEW LAST WORD
3BN= ... BCT 1 £ [STEP BACK TO PREVIOUS WORD
3BNB ... BCT 7 MOVEWORD [LOOP ON D-P-W
3BNG ... LDX 1 GEN1 [RECOVER FMAPP ADDRESS
3BNL ...NOWORDMOVE
3BNQ ... SMO 4 [W
3BNW ... LDX 0 FBITS(1) [LOAD [W]
3BP2 ... NGN 7 1 [#77777777
3BP6 ... SLC 70 0(3) [ MOVE X BITS INTO X7
3BP= ... SRC 7 0(3) [MOVE X BITS TO TOP
3BPB ... SRC 0 0(3) [MOVE DISPLACED BITS TO BOTTOM OF X0
3BPG ... SMO 4
3BPL ... STO 7 FBITS(1) [REPLACE W WITH X BITS + 1'S
3BPQ ... NGN 7 1
3BPW ...NEWWORD
3BQ2 ... SMO 4
3BQ6 ... STO 7 FBITS+1(1) [INSERT EXTRA WORDS
3BQ= ... BUX 1 £ [STEP FORWARD
3BQB ... BCT 6 NEWWORD [LOOP ON COUNT OF P
3BQG ... SMO 4
3BQL ... STO 0 FBITS(1) [OVERWRITE LAST WORD WITH OVERFLOW FR
3BQQ ...XTRA
3BQW ... LDX 2 FX2
3BR2 ... LDX 7 AWORK4(2)
3BR6 ... BZE 7 UP [NO DELETES TO DO
3BR= ...NEXTMAPBDEL
3BRB ... SXFCB AWORK3(2),3
3BRG ... MAPBDEL AWORK2(2),3
3BRL ... BCT 7 NEXTMAPBDEL
3BRQ ...UP
3BRW ...#SKI K6FILEMAP>199$199
3BS2 ...(
3BS6 ... CALL 7 SFINDMAP
3BS= ... LDX 0 ALOGLEN(1)
3BSB ... ADN 0 2
3BSG ... BLOCKTRA 1,AFTER,0
3BSL ...)
3BSQ ... UP
3BSW ...NDOFFILE [APPEND CASE ONLY & X=0
3BT2 ... BNZ 3 (GEOERR)
3BT6 ... NGN 7 1
3BT= ...NDAPPEND
3BTB ... SMO 4
3BTG ... STO 7 FBITS(1) [STORE P WORDS STARTING FROM W
3BTL ... BUX 1 £
3BTQ ... BCT 6 NDAPPEND
3BTW ... BRN XTRA
3BW2 ...[
3BW6 ...SFMAPP
3BW= ... LDX 3 1 [ALTLENG LINK
3BWB ... CALL 7 SFINDMAP
3BWG ... LDX 2 1
3BWL ... EXIT 3 0
3BWQ ...)
3BWW ...#SKI 0
3BX2 ...(
3BXG ADN 5 2
3CC6 BXL 5 AWORK2(2),MODBIT
3CWQ SBN 5 2
3DBB LDX 3 AWORK1(2) [PICK UP NO.OF BITS TO BE INSERTED
3DW2 ADX 3 5
3F*L STO 3 FBITMOD(1) [UPDATE TOTAL
3FT= #
3G#W # NOTE WELL: WE DO NOT USE B0 OF FBITS.[FBITMOD]= NO OF BLOCKS IN
3GSG # THE FILE,I.E. THE NUMBER OF SIGNIFICANT BITS.THUS WHEN WE DIVIDE
3H#6 # [FBITMOD]BY 24,IF IT IS AN EXACT MULTIPLE,THE LAST BIT GOES INTO
3HRQ # THE LAST WORD ON ITS OWN.
3J?B # THUS W1 & W2 ARE ALWAYS ONE LESS THAN THE NUMBER OF WORDS IN THE
3JR2 # MAP
3K=L # (I'M ONLY WRITING THIS DOWN BECAUSE I GOT IT WRONG. DMB)
3KQ= #
3L9W LDN 2 24
3LPG DVS 2 2 [CALC W2 = FINAL LENGTH OF MAP - 1
3M96 LDN 4 24
3MNQ DVS 4 4 [CALC W1=INITIAL LENGTH OF MAP-1
3N8B LDX 2 FX2
3NN2 TXU 3 5
3P7L BCC NOALTLEN [J.UNLESS FMAP NEEDS LENGTHENING
3PM= LDX 7 1
3Q6W #SKI K6FILEMAP>99$99
3QLG TRACE 3,NGN MAP
3R66 ALTLEND 7,FBITS-A1+1(3)
3RKQ CALL 7 SFINDMAP [RESET X1->MAP
3S5B NOALTLEN
3SK2 #
3T4L # WE NOW EXTEND THE MAP
3TJ= #
3W3W # WE SHALL ILLUSTRATE THE CODE BY THREE EXAMPLES (WHICH ARE REASON-
3WHG # ABLY SIMILAR)
3X36 #
3XGQ # THE EXAMPLES ARE:
3Y2B # INSERTING (A) SIX BITS ) BEFORE I (THE INSERT BIT) IN A BIT
3YG2 # (B) 30 BITS > PATTERN WE SHALL REPRESENT BY:-
3Y^L # (B) 54 BITS ) XXXXXXXXIYYYYYYYYYYYYYYY
3^F= #
3^YW LDX 7 AWORK2(2) [PICK UP THE BIT NUMBER FOR INSERT
42DG LDX 2 5 [SAVE W1 IN X2
42Y6 SMO FX2
43CQ LDX 5 AWORK1 [PICK UP NO.OF BIT TO BE INSERTED.
43XB ADX 5 7 [ADD ON BIT ADDR FOR INSERT
44C2 #
44WL # WE HAVE TO MOVE A PATTERN OF BITS ALONG TO MAKE ROOM FOR THE
45B= # NEW ONES. WN,BN IS THE ADDRESS OF THE INSERT BIT,THE FIRST OF
45TW # THOSE TO BE MOVED,AND WNM,BNM IS THE ADDRESS IT IS TO BE MOVED
46*G # TO
46T6 #
47#Q LDN 6 24 [CALC BN AND WN IN X6 AND X7
47SB DVS 6 6
48#2 LDN 4 24
48RL DVS 4 4 [CALC BNM AND WNM IN X4 AND X5
49?= NGN 0 1
49QW SBX 5 7
4==G #SKI K6FILEMAP>99$99
4=Q6 TRACE 5,NEWWORDS
4?9Q # THE TWO ADDRESS MAY BE IN THE SAME WORD(CASE A),
4?PB BZE 5 NODIFF [J.IF NEW BITS FIT IN ONE WORD
4#92 SBN 5 1
4#NL # OR IN ADJACENT WORDS(CASE B),
4*8= BZE 5 ONEDIFF [J.IF NEW BITS EXTEND OVER 1 WORD
4*MW [BOUNDARY ONLY
4B7G # OR IN NONADJACENT WORDS(CASE C).
4BM6 ADN 7 1(1) [SET UP X7 FOR TEST IN LOOP
4C6Q #
4CLB # [X7] IS NOW AN ABSOLUTE ADDRESS OF THE 1ST WORD AFTER THE ONE
4D62 # CONTAINING THE INSERT BIT( I.E WN +1)
4DKL #
4F5= ADX 2 1 [ADD ON FMAP POINTER TO W1
4FJW MSKLOOPA
4G4G #
4GJ6 # THIS CODE MOVES DOWN THE BIT PATTERN FROM THE WORD AFTER THE ONE
4H3Q # CONTAINING THE INSERT BIT (I E WN+1) BY ENOUGH WORDS TO FIT IN ALL
4HHB # THE EXTRA BITS.
4J32 #
4JGL LDX 0 FBITS(2) [PICK UP NEXT WORD DOWN
4K2= SMO 5
4KFW STO 0 FBITS(2) [AND MOVE IN FORWARD BY WNM-WN-1
4K^G TXU 2 7 [J.OUT WHEN X2=WN+FMAP+1
4LF6 BCC XFINA
4LYQ SBN 2 1
4MDB BRN MSKLOOPA
4MY2 XFINA
4NCL #
4NX= # WE NOW FILL IN THE WNM-WN-1 WORDS OF GAP WE HAVE CREATED WITH BITS
4PBW # (I.E -1'S )
4PWG #
4QB6 NGN 0 1 [SET UP MASK OF BITS
4QTQ SBX 7 1 [[X7]= WN+1.
4R*B ADX 5 7 [[X5]= WNM.
4RT2 SBN 7 1 [RESET X7 TO WN
4S#L ADX 5 1 [AND X5 TO FMAP+WNM FOR TEST IN LOOP
4SS= MSKLOOPB
4T?W STO 0 FBITS(2) [SET BITS IN NEXT WORD
4TRG ADN 2 1
4W?6 TXU 2 5 [J.OUT WHEN GAP IS FILLED
4WQQ BCS MSKLOOPB
4X=B #
4XQ2 # WE SHOULD NOW HAVE REDUCED THE "ADJACENT" & "NON-ADJACENT" CASES
4Y9L # TO SIMILARITY (I.E. CASE B & C ARE NOW SIMILAR.
4YP= #
4^8W # REENTRY POINT FOR"ADJACENT"CASE.
4^NG #
5286 SMERJONE
52MQ #
537B # [X7] = WN,[X5]=WNM,[X6]=BN,[X7]=BNM.
53M2 #
546L # WE NOW SET UP X1 TO CONTAIN THE NEW MASK FOR WORD'WN'; I.E WITH
54L= # ALL BITS BEFORE THE INSERT BIT AS BEFORE, THEN AS MANY SET BITS
555W # AS WE CAN FIT IN.X0 CONTAINS THE COMPLEMENTARY PATTERN.
55KG #
5656 # IN OUR EXAMPLE (CASES B & C ).
56JQ #
574B # [X1] = XXXXXXXX1111111111111111
57J2 # [X0] = 11111111IYYYYYYYYYYYYYYY
583L #
58H= LDX 2 1 [SET X2->FMAP
592W SMO 7
59GG LDX 1 FBITS(2) [PICK UP WN
5=26 SBN 6 24
5=FQ NGX 6 6 [SET X6=24-BN
5=^B SMO 6
5?F2 SRC 1 0
5?YL SMO 6
5#D= SLC 01 0 [PICK UP BITS AT END OF WORD (BN ON)
5#XW ADX 6 4 [RESET X6 TO Q= 24+BNM-BN
5*CG BRN MERJALL
5*X6 #
5BBQ # THE BITS ARE TO BE MOVED TO AN ADJACENT WORD (CASE B).
5BWB # WE READJUST THE POINTERS AND REENTER THE CODE FOR CASE C (OF
5CB2 # WHICH CASE B IS A DEGENERATE EXAMPLE
5CTL #
5D*= ONEDIFF
5DSW ADX 5 7 [RESET X5 TO WN
5F#G ADX 5 1 [AND ADD IN FMAP POINTER
5FS6 BRN SMERJONE
5G?Q NODIFF
5GRB #
5H?2 # CASE A . IN THIS ENTRY,THE TO-BE-INSERTED BITS ALL FIT INTO THE
5HQL # SAME WORD.
5J== #
5JPW #SKI K6FILEMAP>99$99
5K9G TRACE 4,NODIFF
5KP6 ADX 5 7 [RESET X5 TO WNM=WN
5L8Q LDX 2 1 [PICK UP ->FMAP
5LNB ADN 5 1(1) [SET X5=FMAP+WN+1
5M82 SMO 7
5MML LDX 1 FBITS(2) [PICK UP WN
5N7= SMO 6
5NLW SLC 01 0 [SHIFT BN
5P6G SBX 4 6
5PL6 SMO 4
5Q5Q SLC 0 0 [SHIFT BNM-BN
5QKB ADX 4 6
5R52 SMO 4
5RJL SRC 01 0 [SHIFT BNM
5S4= SBX 4 6
5SHW SMO 4
5T3G SLC 0 0 [SHIFT BNM-BN
5TH6 LDX 6 4 [SET X6=Q=BNM-BN
5W2Q #
5WGB # IN OUR EXAMPLE NOW :
5X22 #
5XFL # [X1]= XXXXXXXX111111IYYYYYYYYY
5X^= # [X0]= 111111111111111111YYYYYY
5YDW #
5YYG MERJALL
5^D6 #
5^XQ # ALL CASES MERGE HERE. X0 CONTAINS THE BIT PATTERN LEFT OVER FROM
62CB # WN AFTER WE'VE INSERTED THE BITS.
62X2 # WE STORE THE CONTENTS OF X1 IN WN
63BL # X6 CONTAINS THE NUMBER OF BITS OVERFLOWED FROM WN WHICH WE HAVE TO
63W= # MOVE INTO WNM+1.
64*W #
64TG #SKI K6FILEMAP>99$99
65*6 (
65SQ TRACE 0,OVERFLOW
66#B TRACE 1,NEWFBITS
66S2 )
67?L SMO 7
67R= STO 1 FBITS(2) [RE-STORE NEW WN
68=W ADN 3 1(2) [SET X3=FMAP+W2+1 FOR TEST
68QG LDX 2 5 [PICK X2=FMAP+WNM
69=6 #
69PQ # WE PICK UP WNM+1 IN X1,MOVE IN [X6] BITS FROM X0,AND PRESERVE THE
6=9B # BITS MOVED OUT IN X0. WE STORE X1 BACK IN WNM+1,AND RECURSE THIS
6=P2 # PROCESS UNTIL THE END
6?8L #
6?N= MOVELOOP
6#7W #SKI K6FILEMAP>99$99
6#MG TRACE 6,RESTALNG
6*76 TXU 2 3
6*LQ BCC XDONE [J.OUT WHEN END OF BLOCK REACHED
6B6B LDX 1 FBITS(2) [PICK UP NEXT WORD IN MAP
6BL2 SMO 6
6C5L SRC 01 0 [SHIFT BY Q
6CK= STO 1 FBITS(2) [STORE NEW VERSION
6D4W ADN 2 1
6DJG SMO 6
6F46 SLC 0 0 [RESET MASK FOR NEXT TIME
6FHQ BRN MOVELOOP
6G3B XDONE
6GH2 #SKI K6FILEMAP>299$299
6H2L (
6HG= CALL 7 SFINDMAP
6H^W BLOCKTRA 1,FMAPEND
6JFG )
6J^6 UP
6KDQ [
6KNJ ...)
6KYB MENDAREA 20,K99FILEMAP
6LD2 #END
^^^^ ...51145334000900000000