Merge pull request #1 from lscharen/20211020_sprite-and-tile-rewrite

20211020 sprite and tile rewrite
This commit is contained in:
Lucas Scharenbroich 2021-11-01 23:47:30 -05:00 committed by GitHub
commit 3a5d2cb3ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 6994 additions and 4913 deletions

View File

@ -14,7 +14,7 @@
CHAR_TILE_BASE equ 241 ; set this to the real tile id that starts an ASCII run starting at '0' through 'Z'
; Define the sized of the left and right overlay buffers
; Define the sizes of the left and right overlay buffers
R_CHAR_COUNT equ 8 ; "TICK:XXX"
L_CHAR_COUNT equ 7 ; "FPS:XXX"

View File

@ -13,15 +13,6 @@
"file-uri-to-path": "1.0.0"
}
},
"exec-sh": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
"integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
"dev": true,
"requires": {
"merge": "^1.2.0"
}
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@ -62,18 +53,6 @@
}
}
},
"merge": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
"integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
"dev": true
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"nan": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
@ -125,16 +104,6 @@
}
}
},
"watch": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz",
"integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=",
"dev": true,
"requires": {
"exec-sh": "^0.2.0",
"minimist": "^1.2.0"
}
},
"xml2json": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz",

View File

@ -39,7 +39,6 @@
"devDependencies": {
"pngjs": "^6.0.0",
"string-builder": "^0.1.8",
"watch": "latest",
"xml2json": "^0.12.0"
}
}

View File

@ -40,36 +40,157 @@ DOWN_ARROW equ $0A
; Set up our level data
jsr BG0SetUp
jsr TileAnimInit
jsr SetLimits
; Allocate room to load data
jsr MovePlayerToOrigin ; Put the player at the beginning of the map
jsr InitOverlay ; Initialize the status bar
stz frameCount
ldal OneSecondCounter
sta oldOneSecondCounter
jsr UdtOverlay
; Initialize the sprite's global position (this is tracked outside of the tile engine)
lda #16
sta PlayerGlobalX
lda MaxGlobalY
sec
lda #40 ; 32 for tiles, 8 for sprite
sta PlayerGlobalY
stz PlayerXVel
stz PlayerYVel
; Add a sprite to the engine and save it's sprite ID
jsr UpdatePlayerLocal
lda #64 ; 8x8 sprite, tile ID = 64
ldx PlayerX
ldy PlayerY
jsl AddSprite
bcc :sprite_ok
brl Exit ; If we could not allocate a sprite, exit
:sprite_ok
sta PlayerID
; Draw the initial screen
lda #DIRTY_BIT_BG0_REFRESH ; Redraw all of the tiles on the next Render
tsb DirtyBits
lda #$FFFF
jsl Render
; Set up a very specific test. First, we draw a sprite into the sprite plane, and then
; leave it alone. We are just testing the ability to merge sprite plane data into
; the play field tiles.
EvtLoop
jsl DoTimers
jsl Render
jsl ReadControl
; Check the buttons first
pha
bit #$0100
beq :no_jump
lda PlayerStanding
beq :no_jump
lda #$FFF8
sta PlayerYVel
:no_jump
pla
and #$007F ; Ignore the buttons for now
cmp #'q'
bne :7
bne :not_q
brl Exit
:not_q
:7 cmp #LEFT_ARROW
bne :8
brl EvtLoop
cmp #'d'
bne :not_d
lda StartX
cmp MaxBG0X
bcs :do_render
inc
jsl SetBG0XPos
bra :do_render
:not_d
:8 cmp #RIGHT_ARROW
bne :9
brl EvtLoop
cmp #'a'
bne :not_a
lda StartX
beq :do_render
dec
jsl SetBG0XPos
bra :do_render
:not_a
:9
cmp #'s'
bne :not_s
lda StartY
cmp MaxBG0Y
bcs :do_render
inc
jsl SetBG0YPos
bra :do_render
:not_s
cmp #'w'
bne :not_w
lda StartY
beq :do_render
dec
jsl SetBG0YPos
bra :do_render
:not_w
; Do j,l to move the character left/right
cmp #'j'
bne :not_j
lda PlayerXVel
bpl :pos_xvel
cmp #$FFFA
bcc :not_j
:pos_xvel dec
dec
sta PlayerXVel
bra :do_render
:not_j
cmp #'l'
bne :not_l
lda PlayerXVel
bmi :neg_xvel
cmp #6
bcs :not_l
:neg_xvel inc
inc
sta PlayerXVel
bra :do_render
:not_l
; Update the camera position
:do_render
jsr UpdatePlayerPos ; Moves in global cordinates
jsr UpdateCameraPos ; Moves the screen
jsr UpdatePlayerLocal ; Gets local sprite coordinates
lda PlayerID
ldx PlayerX
ldy PlayerY
jsl UpdateSprite ; Move the sprite to this local position
; Let's see what it looks like!
jsl Render
; Update the performance counters
inc frameCount
ldal OneSecondCounter
cmp oldOneSecondCounter
beq :noudt
sta oldOneSecondCounter
jsr UdtOverlay
stz frameCount
:noudt
brl EvtLoop
; Exit code
@ -81,7 +202,222 @@ Exit
bcs Fatal
Fatal brk $00
MyPalette dw $0000,$0777,$0F31,$0E51,$00A0,$02E3,$0BF1,$0FA4,$0FD7,$0EE6,$0F59,$068F,$01CE,$09B9,$0EDA,$0EEE
MyPalette dw $068F,$0EDA,$0000,$068F,$0BF1,$00A0,$0EEE,$0777,$01CE,$0FA4,$0F59,$0D40,$02E3,$09B9,$0F93,$0FD7
PlayerGlobalX ds 2
PlayerGlobalY ds 2
PlayerID ds 2
PlayerX ds 2
PlayerXOld ds 2
PlayerY ds 2
PlayerYOld ds 2
PlayerLastPos ds 2
PlayerXVel ds 2
PlayerYVel ds 2
KeyState ds 2
PlayerStanding ds 2
MaxGlobalX ds 2
MaxGlobalY ds 2
MaxBG0X ds 2
MaxBG0Y ds 2
oldOneSecondCounter ds 2
frameCount ds 2
PLAYER_X_MIN equ 0
PLAYER_X_MAX equ 160-4
PLAYER_Y_MIN equ 0
PLAYER_Y_MAX equ 200-8
EMPTY_TILE equ $0029 ; the tile that makes up the background
AdjustLocalX
clc
adc StartXMod164
cmp #164
bcc *+5
sbc #164
rts
AdjustLocalY
clc
adc StartYMod208
cmp #208
bcc *+5
sbc #208
rts
SetLimits
lda TileMapWidth
asl
asl
sta MaxGlobalX
sec
sbc ScreenWidth
sta MaxBG0X
lda TileMapHeight
asl
asl
asl
sta MaxGlobalY
sec
sbc ScreenHeight
sta MaxBG0Y
rts
; Set the scroll position based on the global cooridinate of the player
; Try to center the player on the screen
UpdateCameraPos
lda ScreenWidth
lsr
sta tmp0
lda PlayerGlobalX
sec
sbc tmp0
bpl :x_pos
lda #0
:x_pos cmp MaxBG0X
bcc :x_ok
lda MaxBG0X
:x_ok jsl SetBG0XPos
lda ScreenHeight
lsr
sta tmp0
lda PlayerGlobalY
sec
sbc tmp0
bpl :y_pos
lda #0
:y_pos cmp MaxBG0Y
bcc :y_ok
lda MaxBG0Y
:y_ok jsl SetBG0YPos
rts
; Convert the global coordinates to adjusted local coordinated (compensating for wrap-around)
UpdatePlayerLocal
lda PlayerGlobalX
sec
sbc StartX
; jsr AdjustLocalX
sta PlayerX
lda PlayerGlobalY
sec
sbc StartY
; jsr AdjustLocalY
sta PlayerY
rts
; Simple updates with gravity and collisions. It's important that eveything in this
; subroutine be done against
UpdatePlayerPos
stz PlayerStanding
lda PlayerYVel
bmi :no_ground_check
; Check if the player is standing on the ground at their current local position
ldx PlayerX
lda PlayerY
clc
adc #8
tay
jsr GetTileAt
cmp #EMPTY_TILE
beq :no_ground_check
lda PlayerGlobalY
and #$fff8
sta PlayerGlobalY
stz PlayerYVel
lda #1
sta PlayerStanding
:no_ground_check
lda PlayerGlobalY
clc
adc PlayerYVel
bpl *+5
lda #0
cmp MaxGlobalY
bcc *+5
lda MaxGlobalY
sta PlayerGlobalY
lda PlayerGlobalX
clc
adc PlayerXVel
bpl *+5
lda #0
cmp MaxGlobalX
bcc *+5
lda MaxGlobalX
sta PlayerGlobalX
lda PlayerXVel
beq :no_dxv
bpl :pos_dxv
inc
bra :no_dxv
:pos_dxv
dec
:no_dxv
sta PlayerXVel
lda PlayerStanding
bne :too_fast
lda PlayerYVel
inc
bmi :is_neg
cmp #4
bcs :too_fast
:is_neg
sta PlayerYVel
:too_fast
rts
; X = coordinate
; Y = coordinate
GetTileAt
txa
bmi :out
clc
adc StartXMod164
cmp #164
bcc *+5
sbc #164
lsr
lsr
tax
tya
bmi :out
clc
adc StartYMod208
cmp #208
bcc *+5
sbc #208
lsr
lsr
lsr
tay
jsl GetTileStoreOffset
tax
ldal TileStore+TS_TILE_ID,x
rts
:out
lda #EMPTY_TILE
rts
; Position the screen with the botom-left corner of the tilemap visible
MovePlayerToOrigin
@ -95,19 +431,13 @@ MovePlayerToOrigin
sec
sbc ScreenHeight
jsl SetBG0YPos
ldx #10
ldy #10
jsl AddSprite
rts
qtRec adrl $0000
da $00
PUT ../shell/Overlay.s
PUT gen/App.TileMapBG0.s
PUT gen/App.TileSetAnim.s
Overlay ENT
rtl
ANGLEBNK ENT

View File

@ -23,3 +23,15 @@
DS 0
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
SNA Tiles
; Segment #4 -- 64KB Sprite Plane Data
ASM SprData.s
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
SNA SPRDATA
; Segment #5 -- 64KB Sprite Mask Data
ASM SprMask.s
KND #$1001 ; Type and Attributes ($11=Static+Bank Relative,$01=Data)
SNA SPRMASK

2
demos/sprites/SprData.s Normal file
View File

@ -0,0 +1,2 @@
spritedata ENT
ds 65536

2
demos/sprites/SprMask.s Normal file
View File

@ -0,0 +1,2 @@
spritemask ENT
ds 65536

File diff suppressed because one or more lines are too long

View File

@ -1,41 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="256" height="30" tilewidth="8" tileheight="8" infinite="0" nextlayerid="4" nextobjectid="2">
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="416" height="30" tilewidth="8" tileheight="8" infinite="0" nextlayerid="4" nextobjectid="2">
<editorsettings>
<export target="world_1-1.json" format="json"/>
</editorsettings>
<tileset firstgid="1" source="Overworld.tsx"/>
<layer id="1" name="App.TileMapBG0" width="256" height="30">
<layer id="1" name="App.TileMapBG0" width="416" height="30">
<data encoding="csv">
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,169,170,169,170,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,57,58,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,209,210,209,210,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,56,21,62,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,57,2147483705,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,56,21,62,21,21,62,21,59,41,41,41,169,170,169,170,169,170,169,170,169,170,41,41,42,43,42,43,42,43,41,41,41,56,21,62,2147483704,41,41,41,169,170,169,170,169,170,41,41,42,43,41,41,41,41,169,170,19,20,21,22,41,41,169,170,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,42,43,42,43,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
56,21,21,21,21,21,21,21,21,59,41,41,209,210,209,210,209,210,209,210,209,210,41,44,45,45,45,45,45,45,46,41,56,21,21,21,21,2147483704,41,41,209,210,209,210,209,210,41,44,45,45,46,41,41,41,209,210,19,20,21,22,41,41,209,210,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,44,45,45,45,45,46,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,65,66,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,67,68,68,69,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,65,66,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,70,71,72,73,41,41,41,41,41,41,41,41,41,41,41,41,65,66,65,66,65,66,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,65,66,65,66,65,66,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,35,36,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,67,68,68,69,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,67,68,68,68,68,68,68,69,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,67,68,68,68,68,68,68,69,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,63,64,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,70,71,72,73,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,70,71,72,71,72,71,72,73,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,70,71,72,71,72,71,72,73,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,63,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,113,114,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,74,75,74,75,74,75,74,75,74,75,74,75,74,75,74,75,41,41,41,41,41,41,74,75,74,75,74,75,113,114,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,113,114,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,74,75,74,75,74,75,41,41,41,41,41,41,41,41,74,75,113,114,113,114,74,75,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,153,154,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,41,41,41,41,41,41,26,26,26,26,26,26,153,154,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,153,154,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,26,26,26,26,26,26,41,41,41,41,41,41,41,41,26,26,153,154,153,154,26,26,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,31,32,31,32,31,32,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,26,26,26,26,26,26,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,7,8,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,26,26,26,26,26,26,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,113,114,41,41,41,41,41,41,74,75,113,114,74,75,113,114,74,75,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,74,75,113,114,74,75,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,74,75,41,41,41,41,41,41,41,41,41,41,74,75,74,75,41,41,41,41,41,41,41,41,113,114,41,41,41,41,113,114,41,41,41,41,113,114,41,41,41,41,41,41,41,41,41,41,74,75,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,74,75,74,75,41,41,41,41,41,41,41,41,41,41,41,41,5,6,41,41,41,41,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,41,41,41,41,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,74,75,74,75,113,114,74,75,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,5,6,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,26,0,26,26,0,26,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,153,154,41,41,41,41,41,41,26,26,153,154,26,26,153,154,26,26,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,26,26,153,154,26,26,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,26,26,41,41,41,41,41,41,41,41,41,41,26,26,26,26,41,41,41,41,41,41,41,41,153,154,41,41,41,41,153,154,41,41,41,41,153,154,41,41,41,41,41,41,41,41,41,41,26,26,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,26,26,26,26,41,41,41,41,41,41,41,41,41,41,41,41,7,8,41,41,41,41,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,41,41,41,41,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,26,26,26,26,153,154,26,26,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,7,8,7,8,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,41,41,26,0,26,26,0,26,41,41,41,41,
41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,41,41,41,41,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,41,41,41,41,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,5,6,5,6,5,6,5,6,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,9,10,41,41,41,41,41,41,31,32,24,25,24,25,24,25,31,32,41,41,
41,41,41,41,57,58,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,57,58,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,57,58,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,41,41,41,41,7,8,7,8,41,41,41,41,41,41,41,41,57,58,41,41,41,41,41,41,7,8,7,8,7,8,41,41,41,41,7,8,7,8,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,7,8,7,8,7,8,7,8,41,41,41,41,41,41,41,41,57,58,41,41,41,41,41,41,9,10,41,41,41,41,41,41,26,26,26,26,33,34,26,26,26,26,41,41,
41,41,41,56,21,62,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,56,21,62,59,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,56,21,62,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,41,41,41,41,5,6,5,6,5,6,41,41,41,41,41,56,21,62,59,41,41,41,5,6,5,6,5,6,5,6,41,41,41,41,5,6,5,6,5,6,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,11,12,13,14,41,41,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,41,41,41,41,41,41,41,56,21,62,59,41,41,41,41,41,9,10,41,41,41,41,41,41,26,26,26,26,0,0,26,26,26,26,41,41,
41,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,57,2147483705,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,57,58,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,57,58,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,41,41,41,41,7,8,7,8,7,8,41,41,41,41,56,21,21,21,21,59,41,41,7,8,7,8,7,8,7,8,41,41,41,41,7,8,7,8,7,8,41,41,41,41,41,41,57,58,41,41,15,16,17,18,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,15,16,17,18,41,41,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,41,41,41,41,41,41,56,21,21,21,21,59,41,41,41,41,9,10,41,41,41,41,41,41,26,26,26,26,0,0,26,26,26,26,41,41,
41,56,21,62,21,21,62,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,42,43,42,43,42,43,41,41,41,56,21,62,2147483704,41,41,41,41,41,41,41,41,41,41,41,42,43,41,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,41,42,43,42,43,41,41,41,41,19,20,21,22,41,56,21,62,21,21,62,21,59,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,42,43,42,43,42,43,41,41,41,56,21,62,59,41,41,41,41,41,41,41,41,41,41,41,42,43,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,42,43,42,43,41,41,41,41,41,41,41,41,41,56,21,62,21,21,62,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,42,43,42,43,42,43,41,41,41,56,21,62,59,41,41,41,41,41,41,41,41,41,41,41,42,43,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,5,6,5,6,5,6,5,6,42,43,42,43,5,6,5,6,5,6,5,6,41,56,21,62,21,21,62,21,5,6,5,6,5,6,5,6,5,6,41,41,41,41,5,6,5,6,5,6,5,6,41,41,41,56,21,62,59,41,19,20,21,22,41,41,41,41,0,41,42,43,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,41,41,41,41,41,56,21,62,21,21,62,21,59,41,41,41,5,6,41,41,41,41,41,41,26,26,26,26,0,0,26,26,26,26,41,41,
56,21,21,21,21,21,21,21,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,44,45,45,45,45,45,45,46,41,56,21,21,21,21,2147483704,41,41,41,41,41,41,41,41,41,44,45,45,46,41,41,41,41,41,19,20,21,22,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,41,41,41,44,45,45,45,45,46,41,41,41,19,20,21,22,56,21,21,21,21,21,21,21,21,59,41,41,41,41,41,41,41,41,19,20,21,22,41,44,45,45,45,45,45,45,46,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41,41,44,45,45,46,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,44,45,45,45,45,46,41,41,41,41,41,41,41,56,21,21,21,21,21,21,21,21,59,41,41,41,41,41,41,41,41,41,41,41,41,41,44,45,45,45,45,45,45,46,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41,41,44,45,45,46,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,7,8,7,8,7,8,7,8,45,45,45,45,7,8,7,8,7,8,7,8,56,21,21,21,21,21,21,21,7,8,7,8,7,8,7,8,7,8,41,41,41,41,7,8,7,8,7,8,7,8,46,41,56,21,21,21,21,59,19,20,21,22,41,41,41,41,0,44,45,45,46,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,41,41,41,41,56,21,21,21,21,21,21,21,21,59,41,41,7,8,41,41,41,41,41,41,26,26,26,26,0,0,26,26,26,26,46,41,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,41,41,41,41,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,41,41,41,41,41,41,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,41,41,41,41,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,41,41,41,41,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,41,41,41,41,41,41,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,41,41,41,41,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,41,41,41,41,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,41,41,41,41,41,41,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,41,41,41,41,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,41,41,41,41,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,41,41,41,41,41,41,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,41,41,41,41,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4
</data>
</layer>
</map>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -5,7 +5,7 @@
BG0SetUp
lda #256
lda #416
sta TileMapWidth
lda #30
sta TileMapHeight
@ -16,123 +16,198 @@ BG0SetUp
rts
App_TileMapBG0
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$000b,$000c,$000d,$000e,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$100f,$0010,$0011,$1012,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$0800,$0801,$0800,$0801,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$000b,$000c,$000d,$000e,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1039,$103a,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$0802,$0803,$0802,$0803,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$100f,$0010,$0011,$1012,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1038,$0015,$003e,$103b,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$000b,$000c,$000d,$000e,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1038,$0015,$0015,$0015,$0015,$103b,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1039,$1239,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$100f,$0010,$0011,$1012,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1038,$0015,$003e,$0015,$0015,$003e,$0015,$103b,$1029,$1029,$1029,$0800,$0801,$0800,$0801,$0800,$0801,$0800,$0801,$0800,$0801,$1029,$1029,$102a,$102b,$102a,$102b,$102a,$102b,$1029,$1029,$1029,$1038,$0015,$003e,$1238,$1029,$1029,$1029,$0800,$0801,$0800,$0801,$0800,$0801,$1029,$1029,$102a,$102b,$1029,$1029,$1029,$1029,$0800,$0801,$1013,$0014,$0015,$1016,$1029,$1029,$0800,$0801
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$102a,$102b,$102a,$102b,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1038,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$103b,$1029,$1029,$0802,$0803,$0802,$0803,$0802,$0803,$0802,$0803,$0802,$0803,$1029,$102c,$002d,$002d,$002d,$002d,$002d,$002d,$102e,$1029,$1038,$0015,$0015,$0015,$0015,$1238,$1029,$1029,$0802,$0803,$0802,$0803,$0802,$0803,$1029,$102c,$002d,$002d,$102e,$1029,$1029,$1029,$0802,$0803,$1013,$0014,$0015,$1016,$1029,$1029,$0802,$0803
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$102c,$002d,$002d,$002d,$002d,$102e,$1029,$1029,$1029,$1013,$0014,$0015,$1016,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029,$1029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0041,$0042,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0043,$0044,$0044,$0045,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0041,$0042,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0046,$0047,$0048,$0049,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0041,$0042,$0041,$0042,$0041,$0042,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0041,$0042,$0041,$0042,$0041,$0042,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0023,$0024,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0043,$0044,$0044,$0045,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0043,$0044,$0044,$0044,$0044,$0044,$0044,$0045,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0043,$0044,$0044,$0044,$0044,$0044,$0044,$0045,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$003f,$0040,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0046,$0047,$0048,$0049,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0046,$0047,$0048,$0047,$0048,$0047,$0048,$0049,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0046,$0047,$0048,$0047,$0048,$0047,$0048,$0049
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$003f,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0071,$0072,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$004a,$004b,$004a,$004b,$004a,$004b,$004a,$004b,$004a,$004b,$004a,$004b,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$004a,$004b,$004a,$004b,$0071,$0072,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0071,$0072,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$004a,$004b,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $004a,$004b,$0071,$0072,$0071,$0072,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0099,$009a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$001a,$001a,$0099,$009a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0099,$009a,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$0099,$009a,$0099,$009a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001f,$0020,$001f,$0020,$001f,$0020,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0071,$0072,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$0071,$0072,$004a,$004b,$0071,$0072,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000b,$000c,$000d,$000e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000b,$000c,$000d,$000e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$0071,$0072,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0071,$0072,$0029,$0029,$0029,$0029,$0071,$0072,$0029,$0029,$0029,$0029,$0071,$0072,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$004a,$004b,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$004a,$004b,$004a,$004b,$0071,$0072,$004a,$004b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$0000,$001a,$001a,$0000,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0099,$009a,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$0099,$009a,$001a,$001a,$0099,$009a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000f,$0010,$0011,$0012
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000f,$0010,$0011,$0012,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$0099,$009a,$001a,$001a
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0099,$009a,$0029,$0029,$0029,$0029,$0099,$009a,$0029,$0029,$0029,$0029
dw $0099,$009a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0099,$009a,$001a,$001a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$0000,$001a,$001a,$0000,$001a,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000b,$000c,$000d,$000e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$001f,$0020,$0018,$0019,$0018,$0019,$0018,$0019,$001f,$0020,$0029,$0029,$0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000f,$0010,$0011,$0012,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016
dw $0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0021,$0022,$001a,$001a,$001a,$001a,$0029,$0029
dw $0029,$0029,$0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000b,$000c,$000d,$000e,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$000b,$000c,$000d,$000e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000b,$000c,$000d,$000e,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0000,$0000,$001a,$001a,$001a,$001a,$0029,$0029,$0029,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0039,$0239,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$000f,$0010,$0011,$0012,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016
dw $0029,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0039,$003a,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029
dw $0029,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0039,$003a,$0029,$0029,$000f,$0010,$0011,$0012,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$000f,$0010,$0011,$0012,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0009,$000a,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0000,$0000,$001a,$001a,$001a,$001a,$0029,$0029
dw $0029,$0038,$0015,$003e,$0015,$0015,$003e,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002a,$002b,$002a,$002b,$002a,$002b,$0029,$0029,$0029,$0038,$0015,$003e,$0238,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002a,$002b,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$002a,$002b,$002a,$002b,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0038,$0015,$003e,$0015,$0015,$003e,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$002a,$002b,$002a,$002b,$002a,$002b,$0029,$0029
dw $0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002a,$002b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002a,$002b,$002a,$002b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0038,$0015,$003e,$0015,$0015,$003e,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002a,$002b,$002a,$002b,$002a,$002b,$0029,$0029,$0029,$0038,$0015,$003e,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002a,$002b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$002a,$002b,$002a,$002b,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0038,$0015,$003e,$0015,$0015,$003e,$0015,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029
dw $0029,$0038,$0015,$003e,$003b,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0000,$0029,$002a,$002b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0005,$0006,$0029,$0029,$0029,$0029
dw $0029,$0038,$0015,$003e,$0015,$0015,$003e,$0015,$003b,$0029,$0029,$0029,$0005,$0006,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0000,$0000,$001a,$001a,$001a,$001a,$0029,$0029,$0038,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002c,$002d,$002d,$002d,$002d,$002d,$002d,$002e,$0029
dw $0038,$0015,$0015,$0015,$0015,$0238,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002c,$002d,$002d,$002e,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$002c,$002d,$002d,$002d,$002d,$002e,$0029,$0029,$0029,$0013,$0014,$0015,$0016
dw $0038,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0029,$002c,$002d,$002d,$002d,$002d,$002d,$002d,$002e,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002c,$002d,$002d,$002e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002c,$002d,$002d,$002d,$002d,$002e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0038,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002c,$002d,$002d,$002d,$002d,$002d,$002d,$002e,$0029
dw $0038,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$002c,$002d,$002d,$002e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$002d,$002d,$002d,$002d,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008
dw $0038,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$002e,$0029,$0038,$0015,$0015,$0015,$0015,$003b,$0013,$0014,$0015,$0016,$0029,$0029,$0029,$0029,$0000,$002c,$002d,$002d,$002e,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029,$0029
dw $0029,$0029,$0029,$0029,$0029,$0029,$0013,$0014,$0015,$0016,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0007,$0008,$0029,$0029,$0029,$0029,$0038,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$003b,$0029,$0029,$0007,$0008,$0029,$0029,$0029,$0029,$0029,$0029,$001a,$001a,$001a,$001a,$0000,$0000,$001a,$001a,$001a,$001a,$002e,$0029
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0029,$0029,$0029,$0029,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0029,$0029,$0029,$0029,$0029,$0029,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0029,$0029,$0029,$0029,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0029,$0029,$0029,$0029,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0029,$0029,$0029,$0029,$0029,$0029,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0029,$0029,$0029,$0029,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0029,$0029,$0029,$0029,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0029,$0029,$0029,$0029,$0029,$0029,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0029,$0029,$0029,$0029,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002
dw $0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0001,$0002,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0029,$0029,$0029,$0029,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0029,$0029,$0029,$0029,$0029,$0029,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0029,$0029,$0029,$0029,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004
dw $0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004,$0003,$0004

File diff suppressed because it is too large Load Diff

View File

@ -14,10 +14,10 @@
},
"scripts": {
"test": "npm run build && build-image.bat %npm_package_config_cadius% && %npm_package_config_gsport%",
"debug": "%npm_package_config_crossrunner% GTETestApp -Source GTETestApp_S02_MAINSEG_Output.txt -Debug -CompatibilityLayer",
"debug": "%npm_package_config_crossrunner% GTETestSprites -Source GTETestSprites_S02_MAINSEG_Output.txt -Debug -CompatibilityLayer",
"build": "%npm_package_config_merlin32% -V %npm_package_config_macros% App.s",
"build:map": "node %npm_package_config_tiled2iigs% ./assets/tiled/world_1-1.json --output-dir ./gen",
"build:tiles": "node %npm_package_config_png2iigs% ./assets/tilesets/smb-16.png --max-tiles 360 --as-tile-data --transparent-color-index 11 > ./gen/App.TileSet.s"
"build:tiles": "node %npm_package_config_png2iigs% ./assets/tilesets/smb-16.png --max-tiles 360 --as-tile-data --transparent-color 6B8CFF > ./gen/App.TileSet.s"
},
"repository": {
"type": "git",

View File

@ -119,6 +119,44 @@ min mac
lda ]1
mout <<<
asr16 mac
cmp #$8000
ror
<<<
asr8 mac
cmp #$80
ror
<<<
; Inline macros for fast calculation of some internal values
_TileStoreOffset mac
lda ]2
asl
tay
lda ]1
asl ; Assume in range, so asl puts a 0 bit into the carry
adc TileStoreYTable,y
<<<
_TileStoreOffsetX mac
lda ]2
asl
tax
lda ]1
asl ; Assume in range, so asl puts a 0 bit into the carry
adc TileStoreYTable,x
<<<
_; Macro variant to calculate inline from any source
_SpriteVBuffAddr mac
lda ]2
clc
adc #NUM_BUFF_LINES
xba
adc ]1
<<<
; Macro to define script steps
ScriptStep MAC
IF #=]5
@ -128,6 +166,76 @@ ScriptStep MAC
FIN
<<<
; A specialized CopyMaskedWord macro that draws a tile from a direct page workspace. Used
; to render fringe tiles and sprite tiles when BG1 is active. If there is no second background,
; then one should use the optimized functions which assumes a PEA opcode and only
; needs to copy data words
;
; ]1 : tiledata direct page address , the tilemask direct page address is tiledata + 32
; ]2 : code field offset
CopyMaskedWordD MAC
lda ]1+32 ; load the mask value
bne mixed ; a non-zero value may be mixed
; This is a solid word
lda #$00F4 ; PEA instruction
sta: ]2,y
ldal ]1 ; load the tile data
sta: ]2+1,y ; PEA operand
bra next
mixed cmp #$FFFF ; All 1's in the mask is fully transparent
beq transparent
; This is the slowest path because there is a *lot* of work to do. So much that it's
; worth it to change up the environment to optimize things a bit more.
;
; Need to fill in the first 8 bytes of the JMP handler with the following code sequence
;
; lda (00),y
; and #MASK
; ora #DATA
lda #$004C ; JMP instruction
sta: ]2,y
ldx _X_REG ; Get the addressing offset
ldal JTableOffset,x ; Get the address offset and add to the base address
adc _BASE_ADDR ; of the current code field line
adc #{]2&$F000} ; adjust for the current row offset
sta: ]2+1,y
tay ; This becomes the new address that we use to patch in
txa ; Get the offset and render a LDA (dp),y instruction
sep #$20
sta: $0001,y ; LDA (00),y operand
lda #$B1
sta: $0000,y ; LDA (00),y opcode
lda #$29
sta: $0002,y ; AND #$0000 opcode
lda #$09
sta: $0005,y ; ORA #$0000 opcode
rep #$20
lda ]1+32 ; insert the tile mask and data into the exception
sta: $0003,y ; handler.
lda ]1
sta: $0006,y
ldy _Y_REG ; restore original y-register value and move on
bra next
; This is a transparent word, so just show the second background layer
transparent
lda #$00B1 ; LDA (dp),y instruction
sta: ]2,y
lda _X_REG ; X is the logical tile offset (0, 2, 4, ... 82) left-to-right
ora #$4800 ; put a PHA after the offset
sta: ]2+1,y
next
eom
; Macros to use in the Masked Tile renderer
;
; ]1 : tiledata offset
@ -243,3 +351,56 @@ CopyMaskedDWord MAC
lda #$0290 ; BCC *+4
sta: $0006,x
eom
; Masked renderer for a dynamic tile with sprite data overlaid. What's interesting about this renderer is that the mask
; value is not used directly, but simply indicates if we can use a LDA 0,x / PHA sequence,
; a LDA (00),y / PHA, or a JMP to a blended render
;
; If a dynamic tile is animated, there is the possibility to create a special mask that marks
; words of the tile that a front / back / mixed across all frames.
;
; ]1 : tiledata offset
; ]2 : tilemask offset
; ]3 : code field offset
CopyMaskedDynSpriteWord MAC
; Need to fill in the first 12(!!) bytes of the JMP handler with the following code sequence
;
; lda (00),y
; and $80,x
; ora $00,x
; and #MASK
; ora #DATA
;
; If MASK == 0, then we can do a PEA. If MASK == $FFFF, then fall back to the simple Dynamic Masked
; code.
ldx _X_REG ; Get the addressing offset
ldal JTableOffset,x ; Get the address offset and add to the base address
adc _BASE_ADDR ; of the current code field line
adc #{]1&$F000} ; adjust for the current row offset
sta: ]1+1,y
tax ; This becomes the new address that we use to patch in
lda _X_REG ; Get the offset and render a LDA (dp),y instruction
sep #$20 ; Easier to do 8-bit operations
sta: $0001,x ; Set the LDA (00),y operand
lda #$B1
sta: $0000,x ; Set the LDA (00),y opcode
lda _T_PTR
sta: $0005,x ; Set ORA 00,x operand
ora #$80
sta: $0003,x ; Set AND 00,x operand
lda #$35
sta: $0002,x ; Set AND 00,x operand
lda #$15
sta: $0004,x ; Set ORA 00,x operand
rep #$30
lda #$0290 ; BCC *+4
sta: $0006,x
eom

View File

@ -8,12 +8,16 @@
use .\Defs.s
; Feature flags
NO_INTERRUPTS equ 1 ; turn off for crossrunner debugging
NO_INTERRUPTS equ 0 ; turn off for crossrunner debugging
NO_MUSIC equ 1 ; turn music + tool loading off
; External data provided by the main program segment
tiledata EXT
; Sprite plane data and mask banks are provided as an exteral segment
spritedata EXT
spritemask EXT
; IF there are overlays, they are provided as an external
Overlay EXT
@ -42,6 +46,10 @@ EngineStartUp ENT
jsr EngineReset ; All of the resources are allocated, put the engine in a known state
jsr InitGraphics ; Initialize all of the graphics-related data
nop
jsr InitSprites ; Initialize the sprite subsystem
jsr InitTiles ; Initialize the tile subsystem
jsr InitTimers ; Initialize the timer subsystem
plb
@ -247,6 +255,7 @@ EngineReset
jsr BuildBank
]step equ ]step+4
--^
rts
; Allow the user to dynamically select one of the pre-configured screen sizes, or pass
@ -333,7 +342,7 @@ ClearKbdStrobe sep #$20
rep #$20
rts
; Read the keyboard and paddle controls and return in a game-cotroller-like format
; Read the keyboard and paddle controls and return in a game-controller-like format
ReadControl ENT
pea $0000 ; low byte = key code, high byte = %------AB
@ -343,8 +352,8 @@ ReadControl ENT
beq :BNotDown
lda #1
ora 1,s
sta 1,s
ora 2,s
sta 2,s
:BNotDown
ldal COMMAND_KEY_REG
@ -352,8 +361,8 @@ ReadControl ENT
beq :ANotDown
lda #2
ora 1,s
sta 1,s
ora 2,s
sta 2,s
:ANotDown
ldal KBD_STROBE_REG ; read the keyboard
@ -370,6 +379,7 @@ ReadControl ENT
put Memory.s
put Graphics.s
put Sprite.s
put Render.s
put Timer.s
put Script.s
@ -379,7 +389,18 @@ ReadControl ENT
put blitter/Tables.s
put blitter/Template.s
put blitter/Tiles.s
put blitter/Tiles00000.s
; put blitter/Tiles00001.s
; put blitter/Tiles00010.s
; put blitter/Tiles00011.s
put blitter/Tiles01000.s
; put blitter/Tiles10001.s
; put blitter/Tiles10010.s
; put blitter/Tiles10011.s
; put blitter/Tiles11000.s
put blitter/TilesBG1.s
put blitter/Vert.s
put blitter/BG0.s
put blitter/BG1.s
put TileMap.s

View File

@ -82,7 +82,7 @@ BankLoad equ 128
AppSpace equ 160 ; 16 bytes of space reserved for application use
tiletmp equ 186 ; 8 bytes of temp storage for the tile renderers
tiletmp equ 178 ; 16 bytes of temp storage for the tile renderers
blttmp equ 192 ; 32 bytes of local cache/scratch space for blitter
tmp8 equ 224 ; another 16 bytes of temporary space to be used as scratch
@ -119,3 +119,26 @@ SWAP_PALETTE_ENTRY equ $0004
SET_DYN_TILE equ $0006
CALLBACK equ $0010
; Tile constants
TILE_ID_MASK equ $01FF
TILE_SPRITE_BIT equ $8000 ; Set if this tile intersects an active sprite
TILE_PRIORITY_BIT equ $4000 ; Put tile on top of sprite
TILE_FRINGE_BIT equ $2000
TILE_MASK_BIT equ $1000
TILE_DYN_BIT equ $0800
TILE_VFLIP_BIT equ $0400
TILE_HFLIP_BIT equ $0200
; Tile Store Offsets (internals)
MAX_TILES equ {26*41} ; Number of tiles in the code field (41 columns * 26 rows)
TILE_STORE_SIZE equ {MAX_TILES*2} ; The tile store contains a tile descriptor in each slot
TS_TILE_ID equ TILE_STORE_SIZE*0
TS_DIRTY equ TILE_STORE_SIZE*1
TS_SPRITE_FLAG equ TILE_STORE_SIZE*2
TS_TILE_ADDR equ TILE_STORE_SIZE*3 ; const value
TS_CODE_ADDR_LOW equ TILE_STORE_SIZE*4 ; const value
TS_CODE_ADDR_HIGH equ TILE_STORE_SIZE*5 ; const value
TS_WORD_OFFSET equ TILE_STORE_SIZE*6
TS_BASE_ADDR equ TILE_STORE_SIZE*7
TS_SPRITE_ADDR equ TILE_STORE_SIZE*8

View File

@ -36,10 +36,25 @@ DoTimers EXT
StartScript EXT
StopScript EXT
; Sprite functions
AddSprite EXT
UpdateSprite EXT
; Direct access to internals
DoScriptSeq EXT
GetTileAddr EXT
PushDirtyTile EXT ; A = address from GetTileStoreOffset, marks as dirty (will not mark the same tile more than once)
PopDirtyTile EXT ; No args, returns Y with tile store offset of the dirty tile
ApplyTiles EXT ; Drain the dirty tile queue and call RenderTile on each
RenderTile EXT ; Y = address from GetTileStoreOffset
GetTileStoreOffset EXT ; X = column, Y = row
TileStore EXT ; Tile store internal data structure
DrawTileSprite EXT ; X = target address in sprite plane, Y = address in tile bank
EraseTileSprite EXT ; X = target address is sprite plane
GetSpriteVBuffAddr EXT ; X = x-coordinate (0 - 159), Y = y-coordinate (0 - 199). Return in Acc.
; Allocate a full 64K bank
AllocBank EXT

View File

@ -67,7 +67,8 @@ InitMemory PushLong #0 ; space for result
]step equ ]step+4
--^
; Fill in a tables with the adddress of all 208 scanlines across all 13 banks
; Fill in a table with the adddress of all 208 scanlines across all 13 banks. Also fill in
; a shorter table that just holds the starting address of the 26 tile block rows.
ldx #0
ldy #0
@ -99,9 +100,38 @@ InitMemory PushLong #0 ; space for result
adc #4 ; move to the next bank address
tay
cmp #4*13
bcs :exit
bcs :exit1
brl :bloop
:exit1
ldx #0
ldy #0
:bloop2
lda BlitBuff+2,y ; Copy the high word first
sta BRowTableHigh,x ; Two rows per bank
sta BRowTableHigh+{26*2},x
sta BRowTableHigh+2,x
sta BRowTableHigh+{26*2}+2,x
lda BlitBuff,y
sta BRowTableLow,x
sta BRowTableLow+{26*2},x
clc
adc #$8000
sta BRowTableLow+2,x
sta BRowTableLow+{26*2}+2,x
txa
adc #4
tax
tya
adc #4 ; move to the next bank address
tay
cmp #4*13
bcs :exit
brl :bloop2
:exit
rts

35
src/README.md Normal file
View File

@ -0,0 +1,35 @@
= Rendering Pipeline =
The engine run through the following render loop on every frame
1. Lock in any changes to the play field scroll position
1. Erase/Redraw dirty sprites into the sprite plane
- If a sprite has moved a different amount than the scroll position, it's marked dirty
- If a sprite was just added on this frame, it's marked dirty
- Any sprite that overlaps a dirty sprite is marked as impacted
- All dirty sprites are erased from the sprite plane
- All dirty and impacted sprites are drawn into the sprite plane
- All of the play field tiles that intersect dirty sprites are marked as dirty with the sprite flag set
1. If a scroll map is defined
- Calculate the new regions of the screen that have been scrolled into view
- For each new tile
- Copy the tile descriptor from the tile map into the tile store
- Mark the tile as dirty
1. For each dirty tile
- Load the tile descriptor from the tile store
- Dispatch to the appropriate tile renderer
- Clear the tile dirty flag
1. If any Masked Overlays are defined
- Turn off shadowing
- Draw the play field on the Overlay rows
- Turn on shadowing
1. In top-to-bottom order
- Draw any Maksed Overlays
- Draw any Opaque Overlays
- Draw any play field rows
*NOTES*
* The dirty tile list has a fast test to see if a tile has already been marked as dirty it is not added twice
* The tile renderer is where data from the sprite plane is combined with tile data to show the sprites on-screen.
* Typically, there will not be Overlays defined and the last step of the renderer is just a single render of all playfield lines at once.

View File

@ -78,37 +78,43 @@ _Render
jsr _ApplyBG0XPosPre
jsr _ApplyBG1XPosPre
jsr _UpdateBG0TileMap
jsr _UpdateBG1TileMap
jsr _RenderSprites ; Once the BG0 X and Y positions are committed, update sprite data
jsr _ApplyBG0XPos ; Patch the PEA instructions with exit BRA opcode
jsr _ApplyBG1XPos ; Patch the PEA instructions with exit BRA opcode
jsr _UpdateBG0TileMap ; and the tile maps. These subroutines build up a list of tiles
jsr _UpdateBG1TileMap ; that need to be updated in the code field
; The code fields are locked in now and reder to be rendered
jsr _ApplyTiles ; This function actually draws the new tiles into the code field
jsr _ApplyBG0XPos ; Patch the code field instructions with exit BRA opcode
jsr _ApplyBG1XPos ; Update the direct page value based on the horizontal position
; The code fields are locked in now and ready to be rendered
jsr _ShadowOff
; Shadowing is turned off. Render all of the scan lines that need a second pass. One
; optimization that can be done here is that the lines can be rendered in any order
; since it is not shown on-screen yet.
ldx #0 ; Blit the full virtual buffer to the screen
ldy #8
jsr _BltRange
; Turn shadowing back on
jsr _ShadowOn
; ldx #0 ; Expose the top 8 rows
; ldy #8
; jsr _PEISlam
; Now render all of the remaining lines in top-to-bottom (or bottom-to-top) order
; ldx #0 ; Blit the full virtual buffer to the screen
; ldy #16
; jsr _BltRange
lda ScreenY0 ; pass the address of the first line of the overlay
asl
tax
lda ScreenAddr,x
clc
adc ScreenX0
jsl Overlay
lda ScreenY0 ; pass the address of the first line of the overlay
clc
adc #0
asl
tax
lda ScreenAddr,x
clc
adc ScreenX0
jsl Overlay
ldx #8 ; Blit the full virtual buffer to the screen
ldy ScreenHeight
@ -130,4 +136,3 @@ _Render
stz DirtyBits
rts

View File

@ -1,5 +1,718 @@
; Some sample code / utilities to help integrate compiled sprites int the GTE rendering
; pipeline.
; Functions for sprie handling. Mostly maintains the sprite list and provides
; utility functions to calculate sprite/tile intersections
;
; The main point of this file to to establish calling conventions and provide a framework
; for blitting a range of sprite lines, instead of always the full sprite.
; The sprite plane actually covers two banks so that more than 32K can be used as a virtual
; screen buffer. In order to be able to draw sprites offscreen, the virtual screen must be
; wider and taller than the physical graphics screen.
;
; Initialize the sprite plane data and mask banks (all data = $0000, all masks = $FFFF)
InitSprites
ldx #$FFFE
lda #0
:loop1 stal spritedata,x
dex
dex
cpx #$FFFE
bne :loop1
ldx #$FFFE
lda #$FFFF
:loop2 stal spritemask,x
dex
dex
cpx #$FFFE
bne :loop2
; Clear values in the sprite array
ldx #{MAX_SPRITES-1}*2
:loop3 stz _Sprites+TILE_STORE_ADDR_1,x
dex
dex
bpl :loop3
rts
; This function looks at the sprite list and renders the sprite plane data into the appropriate
; tiles in the code field
forceSpriteFlag ds 2
_RenderSprites
; First step is to look at the StartX and StartY values. If the offsets have changed from the
; last time that the frame was rederer, then we need to mark all of the sprites as dirty so that
; the tiles that they were located at on the previous frame will be refreshed
stz forceSpriteFlag
lda StartX
cmp OldStartX
beq :no_chng_x
lda #SPRITE_STATUS_DIRTY
sta forceSpriteFlag
:no_chng_x
lda StartY
cmp OldStartY
beq :no_chng_y
lda #SPRITE_STATUS_DIRTY
sta forceSpriteFlag
:no_chng_y
; Second step is to scan the list of sprites. A sprite is either clean or dirty. If it's dirty,
; then its position had changed, so we need to add tiles to the dirty queue to make sure the
; playfield gets update. If it's clean, we can skip everything.
ldx #0
:loop lda _Sprites+SPRITE_STATUS,x ; If the status is zero, that's the sentinel value
beq :out
ora forceSpriteFlag
bit #SPRITE_STATUS_DIRTY ; If the dirty flag is set, do the things....
bne :render
:next inx
inx
bra :loop
:out rts
; This is the complicated part; we need to draw the sprite into the sprite plane, but then
; calculate the code field tiles that this sprite potentially overlaps with and mark those
; tiles as dirty and store the appropriate sprite plane address that those tiles need to copy
; from.
:render
stx tmp0 ; stash the X register
txy ; switch to the Y register
; Run through the list of tile store offsets that this sprite was last drawn into and mark
; those tiles as dirty. The most tiles that a sprite could possibly cover is 20 (a 4x3 sprite)
; that is offset, covering a 5x4 area of play field tiles.
;
; For now, we limit ourselved to 4 tiles until things are working....
lda _Sprites+TILE_STORE_ADDR_1,y
beq :erase_done
jsr _PushDirtyTile
lda _Sprites+TILE_STORE_ADDR_2,y
beq :erase_done
jsr _PushDirtyTile
lda _Sprites+TILE_STORE_ADDR_3,y
beq :erase_done
jsr _PushDirtyTile
lda _Sprites+TILE_STORE_ADDR_4,y
beq :erase_done
jsr _PushDirtyTile
:erase_done
; Really, we should only be erasing and redrawing a sprite if its local coordinateds change. Look into this
; as a future optimization. Ideally, all of the sprites will be rendered into the sprite plane in a separate
; pass from this function, which is primarily concerned with flagging dirty tiles in the Tile Store.
ldx _Sprites+OLD_VBUFF_ADDR,y
jsr _EraseTileSprite ; erase from the old position
; Draw the sprite into the sprint plane buffer(s)
ldx _Sprites+VBUFF_ADDR,y ; Get the address in the sprite plane to draw at
lda _Sprites+TILE_DATA_OFFSET,y ; and the tile address of the tile
tay
jsr _DrawTileSprite ; draw the sprite into the sprite plane
; Mark the appropriate tiles as dirty and as occupied by a sprite so that the ApplyTiles
; subroutine will get the drawn data from the sprite plane into the code field where it
; can be drawn to the screen
ldx tmp0 ; Restore the index into the sprite array
jsr _MarkDirtySprite8x8 ; Eventually will have routines for all sprite sizes
ldx tmp0 ; Restore the index again
bra :next
; Marks a 8x8 square as dirty. The work here is mapping from local screen coordinates to the
; tile store indices. The first step is to adjust the sprite coordinates based on the current
; code field offsets and then cache variations of this value needed in the rest of the subroutine
;
; The SpritX is always the MAXIMUM value of the corner coordinates. We subtract (SpriteX + StartX) mod 4
; to find the coordinate in the sprite plane that match up with the tile in the play field and
; then use that to calculate the VBUFF address to copy sprite data from.
;
; StartX SpriteX z = * mod 4 (SprietX - z)
; ----------------------------------------------
; 0 8 0 8
; 1 8 1 7
; 2 8 2 6
; 3 8 3 5
; 4 9 1 8
; 5 9 2 7
; 6 9 3 6
; 7 9 0 9
; 8 10 2 8
; ...
;
; For the Y-coordinate, we just use "mod 8" instead of "mod 4"
;
; On input, X register = Sprite Array Index
_MarkDirtySprite8x8
stz _Sprites+TILE_STORE_ADDR_1,x ; Clear the Dirty Tiles in case of an early exit
; First, bounds check the X and Y coodinates of the sprite and, if they pass, pre-calculate some
; values that we can use later
lda _Sprites+SPRITE_Y,x ; This is a signed value
bpl :y_is_pos
cmp #$FFF9 ; If a tile is <= -8 do nothing, it's off-screen
bcs :y_is_ok
rts
:y_is_pos cmp ScreenHeight ; Is a tile is > ScreenHeight, it's off-screen
bcc :y_is_ok
rts
:y_is_ok
; The sprite's Y coordinate is in a range that it will impact the visible tiles that make up the play
; field. Figure out what tile(s) they are and what part fo the sprite plane data/mask need to be
; accessed to overlay with the tile pixels
clc
adc StartYMod208 ; Adjust for the scroll offset (could be a negative number!)
tay ; Save this value
and #$0007 ; Get (StartY + SpriteY) mod 8. For negative, this is ok because 65536 mod 8 = 0.
sta tmp6
eor #$FFFF
inc
clc
adc _Sprites+SPRITE_Y,x ; subtract from the SpriteY position
sta tmp1 ; This position will line up with the tile that the sprite overlaps with
tya ; Get back the position of the sprite in the code field
bpl :ty_is_pos
clc
adc #208 ; wrap around if we are slightly off-screen
bra :ty_is_ok
:ty_is_pos cmp #208 ; check if we went too far positive
bcc :ty_is_ok
sbc #208
:ty_is_ok
lsr
lsr
lsr ; This is the row in the Tile Store for top-left corner of the sprite
sta tmp2
; Same code, except for the X coordiante
lda _Sprites+SPRITE_X,x
bpl :x_is_pos
cmp #$FFFD ; If a tile is <= -4 do nothing, it's off-screen
bcs :x_is_ok
rts
:x_is_pos cmp ScreenWidth ; Is a tile is > ScreeWidth, it's off-screen
bcc :x_is_ok
rts
:x_is_ok
clc
adc StartXMod164
tay
and #$0003
sta tmp5 ; save the mod value to test for alignment later
eor #$FFFF
inc
clc
adc _Sprites+SPRITE_X,x
sta tmp3
tya
bpl :tx_is_pos
clc
adc #164
bra :tx_is_ok
:tx_is_pos cmp #164
bcc :tx_is_ok
sbc #164
:tx_is_ok
lsr
lsr
sta tmp4
; tmp5 = X mod 4
; tmp6 = Y mod 8
;
; Look at these values to determine, up front, exactly which tiles will need to be put into the
; dirty tile queue.
;
; tmp5 tmp6
; ------------+
; 0 0 | top-left only (1 tile)
; !0 0 | top row (2 tiles)
; 0 !0 | left column (2 tiles)
; !0 !0 | square (4 tiles)
txy
ldx #0
lda tmp6
beq :hop_y
ldx #4
:hop_y
lda tmp5
beq :hop_x
inx
inx
:hop_x
lda #0 ; shared value
jmp (:mark,x) ; pick the appropriate marking routine
:mark dw :mark1x1,:mark1x2,:mark2x1,:mark2x2
; At this point we have the top-left corner in the sprite plane (tmp1, tmp3) and the corresponding
; column and row in the tile store (tmp2, tmp4). The next step is to add these tile locations to
; the dirty queue and set the sprite flag along with the VBUFF location. We try to incrementally
; calculate new values to avoid re-doing work.
:mark1x1
sta _Sprites+TILE_STORE_ADDR_2,y ; Terminate the list after one item
jsr :top_left
sta _Sprites+TILE_STORE_ADDR_1,y ; Returns the tile store offset
jmp _PushDirtyTile
:mark1x2
sta _Sprites+TILE_STORE_ADDR_3,y ; Terminate the list after two items
jsr :calc_col1 ; Calculate the values for the next column
jsr :top_left
sta _Sprites+TILE_STORE_ADDR_1,y
jsr _PushDirtyTile
jsr :top_right
sta _Sprites+TILE_STORE_ADDR_2,y
jmp _PushDirtyTile
:mark2x1
sta _Sprites+TILE_STORE_ADDR_3,y ; Terminate the list after two items
jsr :calc_row1 ; Calculate the values for the next row
jsr :top_left
sta _Sprites+TILE_STORE_ADDR_1,y
jsr _PushDirtyTile
jsr :bottom_left
sta _Sprites+TILE_STORE_ADDR_2,y
jmp _PushDirtyTile
; This is the maximum value, so no need to terminate the list early
:mark2x2
jsr :calc_col1 ; Calculate the next row and column values
jsr :calc_row1
jsr :top_left
sta _Sprites+TILE_STORE_ADDR_1,y
jsr _PushDirtyTile
jsr :bottom_left
sta _Sprites+TILE_STORE_ADDR_2,y
jsr _PushDirtyTile
jsr :top_right
sta _Sprites+TILE_STORE_ADDR_3,y
jsr _PushDirtyTile
jsr :bottom_right
sta _Sprites+TILE_STORE_ADDR_4,y
jmp _PushDirtyTile
; Functions to advance to the right, or down and cache the values in the direct page
; temporary space for re-use. col0 and row0 is the original tile
:calc_col1
lda tmp3
clc
adc #4
sta tmp7
lda tmp4
inc
cmp #41
bcc *+5
lda #0
sta tmp8
rts
:calc_row1
lda tmp1
clc
adc #8
sta tmp9
lda tmp2
inc
cmp #26
bcc *+5
lda #0
sta tmp10
rts
:top_left
_TileStoreOffsetX tmp4;tmp2 ; Overwrites X
tax
_SpriteVBuffAddr tmp3;tmp1 ; Does not affect X, Y
sta TileStore+TS_SPRITE_ADDR,x
lda #TILE_SPRITE_BIT
sta TileStore+TS_SPRITE_FLAG,x
txa
rts
:top_right
_TileStoreOffsetX tmp8;tmp2
tax
_SpriteVBuffAddr tmp7;tmp1
sta TileStore+TS_SPRITE_ADDR,x
lda #TILE_SPRITE_BIT
sta TileStore+TS_SPRITE_FLAG,x
txa
rts
:bottom_left
_TileStoreOffsetX tmp4;tmp10
tax
_SpriteVBuffAddr tmp3;tmp9
sta TileStore+TS_SPRITE_ADDR,x
lda #TILE_SPRITE_BIT
sta TileStore+TS_SPRITE_FLAG,x
txa
rts
:bottom_right
_TileStoreOffsetX tmp8;tmp10
tax
_SpriteVBuffAddr tmp7;tmp9
sta TileStore+TS_SPRITE_ADDR,x
lda #TILE_SPRITE_BIT
sta TileStore+TS_SPRITE_FLAG,x
txa
rts
; _GetTileAt
;
; Given a relative playfield coordinate [0, ScreenWidth), [0, ScreenHeight) return the
; X = horizontal point [0, ScreenTileWidth]
; Y = vertical point [0, ScreenTileHeight]
;
; Return
; C = 1, out of range
; C = 0, X = column, Y = row
_GetTileAt
cpx ScreenWidth
bcc *+3
rts
cpy ScreenHeight
bcc *+3
rts
tya ; carry is clear here
adc StartYMod208 ; This is the code field line that is at the top of the screen
cmp #208
bcc *+5
sbc #208
lsr
lsr
lsr
tay ; This is the code field row for this point
clc
txa
adc StartXMod164
cmp #164
bcc *+5
sbc #164
lsr
lsr
tax ; Could call _CopyBG0Tile with these arguments
clc
rts
; _DrawSprite
;
; Draw the sprites on the _Sprite list into the Sprite Plane data and mask buffers. This is using the
; tile data right now, but could be replaced with compiled sprite routines.
_DrawSprites
ldx #0
:loop lda _Sprites+SPRITE_STATUS,x
beq :out ; The first open slot is the end of the list
cmp #SPRITE_STATUS_DIRTY
bne :skip
phx
lda _Sprites+VBUFF_ADDR,x ; Load the address in the sprite plane
ldy _Sprites+TILE_DATA_OFFSET,x ; Load the address in the tile data bank
tax
jsr _DrawTileSprite
plx
:skip
inx
inx
bra :loop
:out rts
DrawTileSprite ENT
jsr _DrawTileSprite
rtl
_DrawTileSprite
phb
pea #^tiledata ; Set the bank to the tile data
plb
]line equ 0
lup 8
lda: tiledata+32+{]line*4},y
andl spritemask+{]line*256},x
stal spritemask+{]line*256},x
ldal spritedata+{]line*SPRITE_PLANE_SPAN},x
and: tiledata+32+{]line*4},y
ora: tiledata+{]line*4},y
stal spritedata+{]line*SPRITE_PLANE_SPAN},x
lda: tiledata+32+{]line*4}+2,y
andl spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
stal spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
ldal spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
and: tiledata+32+{]line*4}+2,y
ora: tiledata+{]line*4}+2,y
stal spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
]line equ ]line+1
--^
plb ; pop extra byte
plb
rts
; Erase is easy -- set an 8x8 area of the data region to all $0000 and the corresponding mask
; resgion to all $FFFF
;
; X = address is sprite plane -- erases an 8x8 region
SPRITE_PLANE_SPAN equ 256
EraseTileSprite ENT
jsr _EraseTileSprite
rtl
_EraseTileSprite
phb ; Save the bank to switch to the sprite plane
pea #^spritedata
plb
lda #0
sta: {0*SPRITE_PLANE_SPAN}+0,x
sta: {0*SPRITE_PLANE_SPAN}+2,x
sta: {1*SPRITE_PLANE_SPAN}+0,x
sta: {1*SPRITE_PLANE_SPAN}+2,x
sta: {2*SPRITE_PLANE_SPAN}+0,x
sta: {2*SPRITE_PLANE_SPAN}+2,x
sta: {3*SPRITE_PLANE_SPAN}+0,x
sta: {3*SPRITE_PLANE_SPAN}+2,x
sta: {4*SPRITE_PLANE_SPAN}+0,x
sta: {4*SPRITE_PLANE_SPAN}+2,x
sta: {5*SPRITE_PLANE_SPAN}+0,x
sta: {5*SPRITE_PLANE_SPAN}+2,x
sta: {6*SPRITE_PLANE_SPAN}+0,x
sta: {6*SPRITE_PLANE_SPAN}+2,x
sta: {7*SPRITE_PLANE_SPAN}+0,x
sta: {7*SPRITE_PLANE_SPAN}+2,x
pea #^spritemask
plb
lda #$FFFF
sta: {0*SPRITE_PLANE_SPAN}+0,x
sta: {0*SPRITE_PLANE_SPAN}+2,x
sta: {1*SPRITE_PLANE_SPAN}+0,x
sta: {1*SPRITE_PLANE_SPAN}+2,x
sta: {2*SPRITE_PLANE_SPAN}+0,x
sta: {2*SPRITE_PLANE_SPAN}+2,x
sta: {3*SPRITE_PLANE_SPAN}+0,x
sta: {3*SPRITE_PLANE_SPAN}+2,x
sta: {4*SPRITE_PLANE_SPAN}+0,x
sta: {4*SPRITE_PLANE_SPAN}+2,x
sta: {5*SPRITE_PLANE_SPAN}+0,x
sta: {5*SPRITE_PLANE_SPAN}+2,x
sta: {6*SPRITE_PLANE_SPAN}+0,x
sta: {6*SPRITE_PLANE_SPAN}+2,x
sta: {7*SPRITE_PLANE_SPAN}+0,x
sta: {7*SPRITE_PLANE_SPAN}+2,x
pla
plb
rts
; Add a new sprite to the rendering pipeline
;
; The tile id ithe range 0 - 511. The top 7 bits are used as sprite control bits
;
; Bit 9 : Horizontal flip.
; Bit 10 : Vertical flip.
; Bits 11 - 13 : Sprite Size Selector
; 000 - 8x8 (1x1 tile)
; 001 - 8x16 (1x2 tiles)
; 010 - 16x8 (2x1 tiles)
; 011 - 16x16 (2x2 tiles)
; 100 - 24x16 (3x2 tiles)
; 101 - 16x24 (2x3 tiles)
; 110 - 24x24 (3x3 tiles)
; 111 - 32x24 (4x3 tiles)
; Bit 14 : Low Sprite priority. Draws behind high priority tiles.
; Bit 15 : Reserved. Must be zero.
;
; When a sprite has a size > 8x8, the horizontal tiles are taken from the next tile index and
; the vertical tiles are taken from tileId + 32. This is why tile sheets should be saved
; with a width of 256 pixels.
;
; Single sprite are limited to 24 lines high because there are 28 lines of padding above and below the
; sprite plane buffers, so a sprite that is 32 lines high could overflow the drawing area.
;
; A = tileId + flags
; X = x position
; Y = y position
AddSprite ENT
phb
phk
plb
jsr _AddSprite
plb
rtl
_AddSprite
phx ; Save the horizontal position and tile ID
pha
ldx #0
:loop lda _Sprites+SPRITE_STATUS,x ; Look for an open slot
beq :open
inx
inx
cpx #MAX_SPRITES*2
bcc :loop
pla ; Early out
pla
sec ; Signal that no sprite slot was available
rts
:open lda #SPRITE_STATUS_DIRTY
sta _Sprites+SPRITE_STATUS,x ; Mark this sprite slot as occupied and that it needs to be drawn
pla
jsr _GetTileAddr ; This applies the TILE_ID_MASK
sta _Sprites+TILE_DATA_OFFSET,x
tya ; Y coordinate
sta _Sprites+SPRITE_Y,x
pla ; X coordinate
sta _Sprites+SPRITE_X,x
jsr _GetSpriteVBuffAddr ; Preserves X-register
sta _Sprites+VBUFF_ADDR,x
clc ; Mark that the sprite was successfully added
txa ; And return the sprite ID
rts
; X = x coordinate
; Y = y coordinate
GetSpriteVBuffAddr ENT
jsr _GetSpriteVBuffAddr
rtl
; A = x coordinate
; Y = y coordinate
_GetSpriteVBuffAddr
pha
tya
clc
adc #NUM_BUFF_LINES ; The virtual buffer has 24 lines of off-screen space
xba ; Each virtual scan line is 256 bytes wide for overdraw space
clc
adc 1,s
sta 1,s
pla
rts
; Move a sprite to a new location. If the tile ID of the sprite needs to be changed, then
; a full remove/add cycle needs to happen
;
; A = sprite ID
; X = x position
; Y = y position
UpdateSprite ENT
phb
phk
plb
jsr _UpdateSprite
plb
rtl
_UpdateSprite
cmp #MAX_SPRITES*2 ; Make sure we're in bounds
bcc :ok
rts
:ok
stx tmp0 ; Save the horizontal position
and #$FFFE ; Defensive
tax ; Get the sprite index
lda #SPRITE_STATUS_DIRTY ; Position is changing, mark as dirty
sta _Sprites+SPRITE_STATUS,x ; Mark this sprite slot as occupied and that it needs to be drawn
lda _Sprites+VBUFF_ADDR,x ; Save the previous draw location for erasing
sta _Sprites+OLD_VBUFF_ADDR,x
; lda _Sprites+SPRITE_X,x
; sta _Sprites+OLD_SPRITE_X,x
; lda _Sprites+SPRITE_Y,x
; sta _Sprites+OLD_SPRITE_Y,x
lda tmp0 ; Update the X coordinate
sta _Sprites+SPRITE_X,x
tya ; Update the Y coordinate
sta _Sprites+SPRITE_Y,x
lda tmp0
jsr _GetSpriteVBuffAddr
sta _Sprites+VBUFF_ADDR,x
rts
; Sprite data structures. We cache quite a few pieces of information about the sprite
; to make calculations faster, so this is hidden from the caller.
;
; Each sprite record contains the following properties:
;
; +0: Sprite status word (0 = unoccupied)
; +2: Tile data address
; +4: Screen offset address (used for data and masks)
; Number of "off-screen" lines above logical (0,0)
NUM_BUFF_LINES equ 24
MAX_SPRITES equ 16
SPRITE_REC_SIZE equ 20
SPRITE_STATUS_EMPTY equ 0
SPRITE_STATUS_CLEAN equ 1
SPRITE_STATUS_DIRTY equ 2
SPRITE_STATUS equ 0
TILE_DATA_OFFSET equ {MAX_SPRITES*2}
VBUFF_ADDR equ {MAX_SPRITES*4}
SPRITE_X equ {MAX_SPRITES*6}
SPRITE_Y equ {MAX_SPRITES*8}
OLD_VBUFF_ADDR equ {MAX_SPRITES*10}
TILE_STORE_ADDR_1 equ {MAX_SPRITES*12}
TILE_STORE_ADDR_2 equ {MAX_SPRITES*14}
TILE_STORE_ADDR_3 equ {MAX_SPRITES*16}
TILE_STORE_ADDR_4 equ {MAX_SPRITES*18}
_Sprites ds SPRITE_REC_SIZE*MAX_SPRITES

View File

@ -290,7 +290,7 @@ _UpdateBG0TileMap
sbc #MAX_TILE_Y+1
sta :BlkY ; This is the Y-block we start drawing from
lda StartXMod164 ; Dx the same thing for X, except only need to clamp by 4
lda StartXMod164 ; Do the same thing for X, except only need to clamp by 4
and #$FFFC
lsr
lsr
@ -307,7 +307,7 @@ _UpdateBG0TileMap
; X = Tile column (0 - 40)
; Y = Tile row (0 - 25)
pei :BlkX ; cache the starting X-block index to restore later
pha ; cache the starting X-block index to restore later
pei :Width ; cache the Width value to restore later
:yloop
:xloop
@ -316,25 +316,26 @@ _UpdateBG0TileMap
; Handle fringe tiles -- if the fringe bit is set, then we need to get the fringe tile index
; and merge the tiles before rendering
bit #TILE_FRINGE_BIT
beq :no_fringe
jsr _GetTileAddr
tax
lda FringeMapPtr
ora FringeMapPtr+2
beq :no_fringe
lda [FringeMapPtr],y
jsr _GetTileAddr
tay
jsr _MergeTiles
:no_fringe
; bit #TILE_FRINGE_BIT
; beq :no_fringe
; jsr _GetTileAddr
; tax
; lda FringeMapPtr
; ora FringeMapPtr+2
; beq :no_fringe
; lda [FringeMapPtr],y
; jsr _GetTileAddr
; tay
; jsr _MergeTiles
;
;:no_fringe
inc :Offset ; pre-increment the address.
inc :Offset
ldx :BlkX
ldy :BlkY
jsr _CopyBG0Tile
jsr _SetTile ; set the value in the tile store
lda :BlkX
inc

View File

@ -106,7 +106,7 @@ _SetBG1YPos
; Everytime either BG1 or BG0 X-position changes, we have to update the direct page values. We
; *could* do this by adjusting the since address offset, but we have to change up to 200 values
; *could* do this by adjusting the since the address offset, but we have to change up to 200 values
; when the vertical position changes, and only 41 when the horizontal value changes. Plus
; these are all direct page values
;

View File

@ -90,8 +90,3 @@ stk_save lda #0000 ; load the stack
plb ; restore the bank
rts
; Placeholder for actual sprite drawing. The implementation will be simple because
; we don't do anything sprite related; just call function pointers provided to us.
_RenderSprites
rts

View File

@ -221,6 +221,16 @@ ScreenAddr ENT
]step = ]step+160
--^
; Table of offsets into each row of a Tile Store table. We currently have two tables defined; one
; that is the backing store for the tiles rendered into the code field, and another that holds
; backlink information on the sprite entries that overlap various tiles.
]step equ 0
TileStoreYTable ENT
lup 26
dw ]step
]step = ]step+{41*2}
--^
; This is a double-length table that holds the right-edge adresses of the playfield on the physical
; screen. At most, it needs to hold 200 addresses for a full height playfield. It is double-length
; so that code can pick any offset and copy values without needing to check for a wrap-around. If the
@ -238,6 +248,10 @@ BlitBuff ENT
BTableHigh ds 208*2*2
BTableLow ds 208*2*2
; A shorter table that just holds the blitter row addresses
BRowTableHigh ds 26*2*2
BRowTableLow ds 26*2*2
; A double-length table of addresses for the BG1 bank. The BG1 buffer is 208 rows of 256 bytes each and
; the first row starts $1800 bytes in to cenrer the buffer in the bank
]step equ $1800

File diff suppressed because it is too large Load Diff

112
src/blitter/Tiles00000.s Normal file
View File

@ -0,0 +1,112 @@
; _TBSolidTile
;
; Define the addresses of the subroutines that draw the normal and flipped variants of the tiles, both
; in the optimized (no second background) and normal cases.
;
; On entry, the following register values need to be set
;
; X : address of base tile in the tiledata bank (tileId * 128)
; Y : address of the top-left corder of the tile location in the code field
; B : set to the code field bank
;_TBSolidTile dw _TBSolidTile_00,_TBSolidTile_0H,_TBSolidTile_V0,_TBSolidTile_VH
; dw _TBCopyData,_TBCopyDataH,_TBCopyDataV,_TBCopyDataVH
_TBSolidTile_00
jsr _TBCopyData
jmp _TBFillPEAOpcode
_TBSolidTile_0H
jsr _TBCopyDataH
jmp _TBFillPEAOpcode
_TBSolidTile_V0
jsr _TBCopyDataV
jmp _TBFillPEAOpcode
_TBSolidTile_VH
jsr _TBCopyDataVH
jmp _TBFillPEAOpcode
; The workhorse blitter. This blitter copies tile data into the code field without masking. This is the
; most common blitter function. It is slightly optimized to fall through to the code that sets the PEA
; opcodes in order to be slightly more efficient given it's frequent usage.
;
; There is a small variation of this blitter that just copies the data without setting the PEA opcodes. This
; is used by the engine when the capabilitiy bits have turned off the second background layer. In fact, most
; of the tile rendering routines have an optimized version for this important use case. Skipping the opcode
; step results in a 37% speed boost in tile rendering.
;
; This does not increase the FPS by 37% because only a small number of tiles are drawn each frame, but it
; has an impact and can significantly help out when sprites trigger more dirty tile updates than normal.
_TBCopyData
]line equ 0
lup 8
ldal tiledata+{]line*4},x
sta: $0004+{]line*$1000},y
ldal tiledata+{]line*4}+2,x
sta: $0001+{]line*$1000},y
]line equ ]line+1
--^
rts
_TBCopyDataH
]line equ 0
lup 8
ldal tiledata+{]line*4}+64,x
sta: $0004+{]line*$1000},y
ldal tiledata+{]line*4}+66,x
sta: $0001+{]line*$1000},y
]line equ ]line+1
--^
rts
_TBCopyDataV
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4},x
sta: $0004+{]dest*$1000},y
ldal tiledata+{]src*4}+2,x
sta: $0001+{]dest*$1000},y
]src equ ]src-1
]dest equ ]dest+1
--^
rts
_TBCopyDataVH
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4}+64,x
sta: $0004+{]dest*$1000},y
ldal tiledata+{]src*4}+66,x
sta: $0001+{]dest*$1000},y
]src equ ]src-1
]dest equ ]dest+1
--^
rts
; A simple helper function that fill in all of the opcodes of a tile with the PEA opcode. This is
; a common function since a tile must be explicitly flagged to use a mask, so this routine is used
; quite frequently in a well-designed tile map.
_TBFillPEAOpcode
sep #$20
lda #$F4
sta: $0000,y
sta: $0003,y
sta $1000,y
sta $1003,y
sta $2000,y
sta $2003,y
sta $3000,y
sta $3003,y
sta $4000,y
sta $4003,y
sta $5000,y
sta $5003,y
sta $6000,y
sta $6003,y
sta $7000,y
sta $7003,y
rep #$20
rts

70
src/blitter/Tiles00001.s Normal file
View File

@ -0,0 +1,70 @@
; _TBDynamicTile
;
; These subroutines fill in the code field with the instructions to render data from the dynamic
; code buffer. This is a bit different, because no tile data is manipulated. It is the
; responsibiliy of the user of the API to use the CopyTileToDyn subroutine to get data
; into the correct location.
;
; This tile type does not explicitly support horizontal or vertical flipping. An appropriate tile
; descriptor should be passed into CopyTileToDyn to put the horizontally or vertically flipped source
; data into the dynamic tile buffer
_TBDynamicTile dw _TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00
dw _TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00
_TBDynamicTile_00
jsr _TBDynamicData
jmp _TBFillLdaDpOpcode
; Primitives to render a dynamic tile
;
; LDA 00,x / PHA where the operand is fixed when the tile is rendered
; $B5 $00 $48
;
; A = dynamic tile id (must be <32)
_TBDynamicData
txa
asl
asl
asl
xba ; Undo the x128 we just need x4
and #$007F ; clamp to < (32 * 4)
ora #$4800 ; insert the PHA instruction
]line equ 0 ; render the first column
lup 8
sta: $0004+{]line*$1000},y
]line equ ]line+1
--^
inc ; advance to the next word
inc
]line equ 0 ; render the second column
lup 8
sta: $0001+{]line*$1000},y
]line equ ]line+1
rts
; A simple helper function that fill in all of the opcodes of a tile with the LDA dp,x opcode.
_TBFillLdaDpOpcode
sep #$20
lda #$B5
sta: $0000,y
sta: $0003,y
sta $1000,y
sta $1003,y
sta $2000,y
sta $2003,y
sta $3000,y
sta $3003,y
sta $4000,y
sta $4003,y
sta $5000,y
sta $5003,y
sta $6000,y
sta $6003,y
sta $7000,y
sta $7003,y
rep #$20
rts

130
src/blitter/Tiles00010.s Normal file
View File

@ -0,0 +1,130 @@
; _TBMaskedTile
;
; These tile renderes are for "normal" tiles that also apply their mask data. If the case of the second
; background being disabled, the optimized variants are the same as Tile00000
_TBMaskedTile dw _TBMaskedTile_00,_TBMaskedTile_0H,_TBMaskedTile_V0,_TBMaskedTile_VH
dw _TBCopyData,_TBCopyDataH,_TBCopyDataV,_TBCopyDataVH
_TBMaskedTile_00
stx _X_REG ; Save these values as we will need to reload them
sty _Y_REG ; at certain points
sta _T_PTR
tax
; Do the left column first
CopyMaskedWord tiledata+0;tiledata+32+0;$0003
CopyMaskedWord tiledata+4;tiledata+32+4;$1003
CopyMaskedWord tiledata+8;tiledata+32+8;$2003
CopyMaskedWord tiledata+12;tiledata+32+12;$3003
CopyMaskedWord tiledata+16;tiledata+32+16;$4003
CopyMaskedWord tiledata+20;tiledata+32+20;$5003
CopyMaskedWord tiledata+24;tiledata+32+24;$6003
CopyMaskedWord tiledata+28;tiledata+32+28;$7003
; Move the index for the JTableOffset array. This is the same index used for transparent words,
; so, if _X_REG is zero, then we would be patching out the last word in the code field with LDA (0),y
; and then increment _X_REG by two to patch the next-to-last word in the code field with LDA (2),y
inc _X_REG
inc _X_REG
; Do the right column
CopyMaskedWord tiledata+2;tiledata+32+2;$0000
CopyMaskedWord tiledata+6;tiledata+32+6;$1000
CopyMaskedWord tiledata+10;tiledata+32+10;$2000
CopyMaskedWord tiledata+14;tiledata+32+14;$3000
CopyMaskedWord tiledata+18;tiledata+32+18;$4000
CopyMaskedWord tiledata+22;tiledata+32+22;$5000
CopyMaskedWord tiledata+26;tiledata+32+26;$6000
CopyMaskedWord tiledata+30;tiledata+32+30;$7000
rts
_TBMaskedTile_0H
stx _X_REG ; Save these values as we will need to reload them
sty _Y_REG ; at certain points
sta _T_PTR
tax
CopyMaskedWord tiledata+64+0;tiledata+64+32+0;$0003
CopyMaskedWord tiledata+64+4;tiledata+64+32+4;$1003
CopyMaskedWord tiledata+64+8;tiledata+64+32+8;$2003
CopyMaskedWord tiledata+64+12;tiledata+64+32+12;$3003
CopyMaskedWord tiledata+64+16;tiledata+64+32+16;$4003
CopyMaskedWord tiledata+64+20;tiledata+64+32+20;$5003
CopyMaskedWord tiledata+64+24;tiledata+64+32+24;$6003
CopyMaskedWord tiledata+64+28;tiledata+64+32+28;$7003
inc _X_REG
inc _X_REG
CopyMaskedWord tiledata+64+2;tiledata+64+32+2;$0000
CopyMaskedWord tiledata+64+6;tiledata+64+32+6;$1000
CopyMaskedWord tiledata+64+10;tiledata+64+32+10;$2000
CopyMaskedWord tiledata+64+14;tiledata+64+32+14;$3000
CopyMaskedWord tiledata+64+18;tiledata+64+32+18;$4000
CopyMaskedWord tiledata+64+22;tiledata+64+32+22;$5000
CopyMaskedWord tiledata+64+26;tiledata+64+32+26;$6000
CopyMaskedWord tiledata+64+30;tiledata+64+32+30;$7000
rts
_TBMaskedTile_V0
stx _X_REG ; Save these values as we will need to reload them
sty _Y_REG ; at certain points
sta _T_PTR
tax
CopyMaskedWord tiledata+0;tiledata+32+0;$7003
CopyMaskedWord tiledata+4;tiledata+32+4;$6003
CopyMaskedWord tiledata+8;tiledata+32+8;$5003
CopyMaskedWord tiledata+12;tiledata+32+12;$4003
CopyMaskedWord tiledata+16;tiledata+32+16;$3003
CopyMaskedWord tiledata+20;tiledata+32+20;$2003
CopyMaskedWord tiledata+24;tiledata+32+24;$1003
CopyMaskedWord tiledata+28;tiledata+32+28;$0003
inc _X_REG
inc _X_REG
CopyMaskedWord tiledata+2;tiledata+32+2;$7000
CopyMaskedWord tiledata+6;tiledata+32+6;$6000
CopyMaskedWord tiledata+10;tiledata+32+10;$5000
CopyMaskedWord tiledata+14;tiledata+32+14;$4000
CopyMaskedWord tiledata+18;tiledata+32+18;$3000
CopyMaskedWord tiledata+22;tiledata+32+22;$2000
CopyMaskedWord tiledata+26;tiledata+32+26;$1000
CopyMaskedWord tiledata+30;tiledata+32+30;$0000
rts
_TBMaskedTile_VH
stx _X_REG ; Save these values as we will need to reload them
sty _Y_REG ; at certain points
sta _T_PTR
tax
CopyMaskedWord tiledata+64+0;tiledata+64+32+0;$7003
CopyMaskedWord tiledata+64+4;tiledata+64+32+4;$6003
CopyMaskedWord tiledata+64+8;tiledata+64+32+8;$5003
CopyMaskedWord tiledata+64+12;tiledata+64+32+12;$4003
CopyMaskedWord tiledata+64+16;tiledata+64+32+16;$3003
CopyMaskedWord tiledata+64+20;tiledata+64+32+20;$2003
CopyMaskedWord tiledata+64+24;tiledata+64+32+24;$1003
CopyMaskedWord tiledata+64+28;tiledata+64+32+28;$0003
inc _X_REG
inc _X_REG
CopyMaskedWord tiledata+64+2;tiledata+64+32+2;$7000
CopyMaskedWord tiledata+64+6;tiledata+64+32+6;$6000
CopyMaskedWord tiledata+64+10;tiledata+64+32+10;$5000
CopyMaskedWord tiledata+64+14;tiledata+64+32+14;$4000
CopyMaskedWord tiledata+64+18;tiledata+64+32+18;$3000
CopyMaskedWord tiledata+64+22;tiledata+64+32+22;$2000
CopyMaskedWord tiledata+64+26;tiledata+64+32+26;$1000
CopyMaskedWord tiledata+64+30;tiledata+64+32+30;$0000
rts

64
src/blitter/Tiles00011.s Normal file
View File

@ -0,0 +1,64 @@
; _TBDynamicMaskTile
;
; Insert a code sequence to mask the dynamic tile against the background. This is quite a slow process because
; every word needs to be handled with a JMP exception; but it looks good!
_TBDynamicMaskTile dw _TBDynamicMaskTile_00,_TBDynamicMaskTile_00,_TBDynamicMaskTile_00,_TBDynamicMaskTile_00
dw _TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00
_TBDynamicMaskTile_00
jsr _TBDynamicDataAndMask
jmp _TBFillJMPOpcode
; A = dynamic tile id (must be <32)
_TBDynamicDataAndMask
and #$007F ; clamp to < (32 * 4)
sta _T_PTR
stx _X_REG
CopyMaskedDWord $0003
CopyMaskedDWord $1003
CopyMaskedDWord $2003
CopyMaskedDWord $3003
CopyMaskedDWord $4003
CopyMaskedDWord $5003
CopyMaskedDWord $6003
CopyMaskedDWord $7003
inc _T_PTR ; Move to the next column
inc _T_PTR
inc _X_REG ; Move to the next column
inc _X_REG
CopyMaskedDWord $0000
CopyMaskedDWord $1000
CopyMaskedDWord $2000
CopyMaskedDWord $3000
CopyMaskedDWord $4000
CopyMaskedDWord $5000
CopyMaskedDWord $6000
CopyMaskedDWord $7000
rts
; A simple helper function that fill in all of the opcodes of a tile with the JMP opcode.
_TBFillJMPOpcode
sep #$20
lda #$4C
sta: $0000,y
sta: $0003,y
sta $1000,y
sta $1003,y
sta $2000,y
sta $2003,y
sta $3000,y
sta $3003,y
sta $4000,y
sta $4003,y
sta $5000,y
sta $5003,y
sta $6000,y
sta $6003,y
sta $7000,y
sta $7003,y
rep #$20
rts

132
src/blitter/Tiles01000.s Normal file
View File

@ -0,0 +1,132 @@
; _TBSolidSpriteTile
;
; Renders solid tiles with sprites layered on top of the tile data. Because we need to combine
; data from the sprite plane, tile data and write to the code field (which are all in different banks),
; there is no way to do everything inline, so a composite tile is created on the fly and written to
; a direct page buffer. This direct page buffer is then used to render the tile.
_TBSolidSpriteTile_00
; ldx #45*128
jsr _TBCopyTileDataToCBuff ; Copy the tile into the compositing buffer (using correct x-register)
jsr _TBApplySpriteData ; Overlay the data form the sprite plane (and copy into the code field)
jmp _TBFillPEAOpcode ; Fill in the code field opcodes
_TBSolidSpriteTile_0H
jsr _TBCopyTileDataToCBuffH
jsr _TBApplySpriteData
jmp _TBFillPEAOpcode
_TBSolidSpriteTile_V0
jsr _TBCopyTileDataToCBuffV
jsr _TBApplySpriteData
jmp _TBFillPEAOpcode
_TBSolidSpriteTile_VH
jsr _TBCopyTileDataToCBuffVH
jsr _TBApplySpriteData
jmp _TBFillPEAOpcode
; Fast variation that does not need to set the opcode
_TBFastSpriteTile_00
jsr _TBCopyTileDataToCBuff ; Copy the tile into the compositing buffer
jmp _TBApplySpriteData ; Overlay the data form the sprite plane (and copy into the code field)
_TBFastSpriteTile_0H
jsr _TBCopyTileDataToCBuffH
jmp _TBApplySpriteData
_TBFastSpriteTile_V0
jsr _TBCopyTileDataToCBuffV
jmp _TBApplySpriteData
_TBFastSpriteTile_VH
jsr _TBCopyTileDataToCBuffVH
jmp _TBApplySpriteData
; Need to update the X-register before calling this
_TBApplySpriteData
ldx _SPR_X_REG ; set to the unaligned tile block address in the sprite plane
]line equ 0
lup 8
lda blttmp+{]line*4}
andl spritemask+{]line*SPRITE_PLANE_SPAN},x
oral spritedata+{]line*SPRITE_PLANE_SPAN},x
sta: $0004+{]line*$1000},y
lda blttmp+{]line*4}+2
andl spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
oral spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
sta: $0001+{]line*$1000},y
]line equ ]line+1
--^
rts
; Copy tile data into the direct page compositing buffer. The main reason to do this in full passes is
; because we can avoid needing to use both the X and Y registers during the compositing process and
; reserve Y to hold the code field address.
;
; Also, we can get away with not setting the bank register, this is a wash in terms of speed, but results
; in simpler, more composable subroutines
_TBCopyTileDataToCBuff
]line equ 0
lup 8
ldal tiledata+{]line*4},x
sta blttmp+{]line*4}
ldal tiledata+{]line*4}+2,x
sta blttmp+{]line*4}+2
]line equ ]line+1
--^
rts
_TBCopyTileDataToCBuffH
]line equ 0
lup 8
ldal tiledata+{]line*4}+64,x
sta blttmp+{]line*4}
ldal tiledata+{]line*4}+64+2,x
sta blttmp+{]line*4}+2
]line equ ]line+1
--^
rts
_TBCopyTileDataToCBuffV
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4},x
sta blttmp+{]dest*4}
ldal tiledata+{]src*4}+2,x
sta blttmp+{]dest*4}+2
]src equ ]src-1
]dest equ ]dest+1
--^
rts
_TBCopyTileDataToCBuffVH
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4}+64,x
sta blttmp+{]dest*4}
ldal tiledata+{]src*4}+64+2,x
sta blttmp+{]dest*4}+2
]src equ ]src-1
]dest equ ]dest+1
--^
rts
; Copy just the data into the code field from the composite buffer
_TBSolidComposite
]line equ 0
lup 8
lda blttmp+{]line*4}
sta: $0004+{]line*$1000},y
lda blttmp+{]line*4}+2
sta: $0001+{]line*$1000},y
]line equ ]line+1
--^
rts

132
src/blitter/Tiles01010.s Normal file
View File

@ -0,0 +1,132 @@
; _TBMaskedSpriteTile
;
; Renders a composited tile with masking to the code field.
_TBMaskedSpriteTile dw _TBMaskedSpriteTile_00
dw _TBMaskedSpriteTile_0H
dw _TBMaskedSpriteTile_V0
dw _TBMaskedSpriteTile_VH
; dw _TBCopyData,_TBCopyDataH,_TBCopyDataV,_TBCopyDataVH
_TBMaskedSpriteTile_00
jsr _TBCreateComposite
jsr _TBSolidComposite
jmp _TBFillPEAOpcode
_TBMaskedSpriteTile_0H
jsr _TBCreateCompositeH
jsr _TBSolidComposite
jmp _TBFillPEAOpcode
_TBMaskedSpriteTile_V0
jsr _TBCreateCompositeV
jsr _TBSolidComposite
jmp _TBFillPEAOpcode
_TBMaskedSpriteTile_VH
jsr _TBCreateCompositeVH
jsr _TBSolidComposite
jmp _TBFillPEAOpcode
_TBCreateCompositeDataAndMask
phb
pea #^tiledata
plb
]line equ 0
lup 8
lda: tiledata+{]line*4},y
andl spritemask+{]line*SPRITE_PLANE_SPAN},x
oral spritedata+{]line*SPRITE_PLANE_SPAN},x
sta blttmp+{]line*4}
lda: tiledata+{]line*4}+32,y
andl spritemask+{]line*SPRITE_PLANE_SPAN},x
sta blttmp+{]line*4}+32
lda: tiledata+{]line*4}+2,y
andl spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
oral spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
sta blttmp+{]line*4}+2
lda: tiledata+{]line*4}+32+2,y
andl spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
sta blttmp+{]line*4}+32+2
]line equ ]line+1
--^
plb
plb
rts
_TBCreateCompositeH
phb
pea #^tiledata
plb
]line equ 0
lup 8
lda: tiledata+{]line*4}+64,y
andl spritemask+{]line*SPRITE_PLANE_SPAN},x
oral spritedata+{]line*SPRITE_PLANE_SPAN},x
sta blttmp+{]line*4}
lda: tiledata+{]line*4}+64+2,y
andl spritemask+{]line*SPRITE_PLANE_SPAN}+2,x
oral spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
sta blttmp+{]line*4}+2
]line equ ]line+1
--^
plb
plb
rts
_TBCreateCompositeV
]src equ 7
]dest equ 0
lup 8
lda: tiledata+{]src*4},y
andl spritemask+{]dest*SPRITE_PLANE_SPAN},x
oral spritedata+{]dest*SPRITE_PLANE_SPAN},x
sta blttmp+{]dest*4}
lda: tiledata+{]src*4}+2,y
andl spritemask+{]dest*SPRITE_PLANE_SPAN}+2,x
oral spritedata+{]dest*SPRITE_PLANE_SPAN}+2,x
sta blttmp+{]dest*4}+2
]src equ ]src-1
]dest equ ]dest+1
--^
rts
_TBCreateCompositeVH
]src equ 7
]dest equ 0
lup 8
lda: tiledata+{]src*4}+64,y
andl spritemask+{]dest*SPRITE_PLANE_SPAN},x
oral spritedata+{]dest*SPRITE_PLANE_SPAN},x
sta blttmp+{]dest*4}
lda: tiledata+{]src*4}+64+2,y
andl spritemask+{]dest*SPRITE_PLANE_SPAN}+2,x
oral spritedata+{]dest*SPRITE_PLANE_SPAN}+2,x
sta blttmp+{]dest*4}+2
]src equ ]src-1
]dest equ ]dest+1
--^
rts
; Copy just the data into the code field from the composite buffer
_TBSolidComposite
]line equ 0
lup 8
lda blttmp+{]line*4}
sta: $0004+{]line*$1000},y
lda blttmp+{]line*4}+2
sta: $0001+{]line*$1000},y
]line equ ]line+1
--^
rts

6
src/blitter/Tiles10000.s Normal file
View File

@ -0,0 +1,6 @@
; _TBPriorityTile
;
; The priority bit allows the tile to be rendered in front of sprites. If there's no sprite
; in this tile area, then just fallback to the Tile00000.s implementation
_TBPriorityTile dw _TBSolidTile_00,_TBSolidTile_0H,_TBSolidTile_V0,_TBSolidTile_VH
dw _TBCopyData,_TBCopyDataH,_TBCopyDataV,_TBCopyDataVH

6
src/blitter/Tiles10001.s Normal file
View File

@ -0,0 +1,6 @@
; _TBPriorityDynamicTile
;
; The priority bit allows the tile to be rendered in front of sprites. If there's no sprite
; in this tile area, then just fallback to the Tile00001.s implementation
_TBPriorityDynamicTile dw _TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00
dw _TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00

19
src/blitter/Tiles10010.s Normal file
View File

@ -0,0 +1,19 @@
; _TBMaskedPriorityTile
;
; The priority bit allows the tile to be rendered in front of sprites. If there's no sprite
; in this tile area, then just fallback to the Tile00000.s implementation
_TBMaskedPriorityTile dw _TBMaskedTile_00,_TBMaskedTile_0H,_TBMaskedTile_V0,_TBMaskedTile_VH
dw _TBCopyData,_TBCopyDataH,_TBCopyDataV,_TBCopyDataVH
; NOTE: Eventually, we want a way to support this use-case
;
; When the high-priority bit is set for a tile, then the BG0 tile will be rendered behind the BG1 data. In
; order to support this, the optional BG1 mask buffer needs to be enabled and *every* word in the tile
; becomes a JMP handler (similar to masked dynamic tiles)
;
; The 8 bytes of code that is generated in the JMP handler is
;
; lda #tiledata
; and [dp],y
; ora (dp),y
; nop

6
src/blitter/Tiles10011.s Normal file
View File

@ -0,0 +1,6 @@
; _TBPriorityDynamicMaskTile
;
; The priority bit allows the tile to be rendered in front of sprites. If there's no sprite
; in this tile area, then just fallback to the Tile00000.s implementation
_TBPriorityDynamicMaskTile dw _TBDynamicMaskTile_00,_TBDynamicMaskTile_00,_TBDynamicMaskTile_00,_TBDynamicMaskTile_00
dw _TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00,_TBDynamicTile_00

25
src/blitter/Tiles11000.s Normal file
View File

@ -0,0 +1,25 @@
; _TBPrioritySpriteTile
;
; When the sprite is composited with the tile data, the tile mask is used to place the tile data on top of
; any sprite data
; Need to update the X-register before calling this
_TBApplyPrioritySpriteData
ldx _SPR_X_REG ; set to the unaligned tile block address in the sprite plane
]line equ 0
lup 8
ldal spritedata+{]line*SPRITE_PLANE_SPAN},x
and blttmp+{]line*4}+32
ora blttmp+{]line*4}
sta: $0004+{]line*$1000},y
ldal spritedata+{]line*SPRITE_PLANE_SPAN}+2,x
and blttmp+{]line*4}+32+2
ora blttmp+{]line*4}+2
sta: $0001+{]line*$1000},y
]line equ ]line+1
--^
ldx _X_REG ; restore the original value
rts

47
src/blitter/TilesBG1.s Normal file
View File

@ -0,0 +1,47 @@
_TBSolidBG1_00
]line equ 0
lup 8
ldal tiledata+{]line*4},x
sta: $0000+{]line*$0100},y
ldal tiledata+{]line*4}+2,x
sta: $0002+{]line*$0100},y
]line equ ]line+1
--^
rts
_TBSolidBG1_0H
]line equ 0
lup 8
ldal tiledata+{]line*4}+64,x
sta: $0000+{]line*$0100},y
ldal tiledata+{]line*4}+64+2,x
sta: $0002+{]line*$0100},y
]line equ ]line+1
--^
rts
_TBSolidBG1_V0
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4},x
sta: $0000+{]dest*$0100},y
ldal tiledata+{]src*4}+2,x
sta: $0002+{]dest*$0100},y
]src equ ]src-1
]dest equ ]dest+1
--^
rts
_TBSolidBG1_VH
]src equ 7
]dest equ 0
lup 8
ldal tiledata+{]src*4}+64,x
sta: $0000+{]dest*$0100},y
ldal tiledata+{]src*4}+64+2,x
sta: $0002+{]dest*$0100},y
]src equ ]src-1
]dest equ ]dest+1
--^
rts

View File

@ -2,7 +2,7 @@
* Basic sprite compiler
*
* GTE has some specific needs that makes existing tools (like MrSprite) inappropriate. GTE
* sprites need to reference some internal data structures and have slightly difference code
* sprites need to reference some internal data structures and have slightly different code
* in order to handle clipping to the playfield bounds.
*
* The core sprite drawing approach is the same (set up Bank 1 direct page and stack), but
@ -41,4 +41,81 @@
* a sprite record is set up to allow the sprite to be entered in the middle and exited
* before the last line of the sprite.
*/
const { readPNG, pngToIIgsBuff } = require('./png2iigs');
const process = require('process');
main(process.argv.slice(2)).then(
() => process.exit(0),
(e) => {
console.error(e);
process.exit(1);
}
);
async function main(argv) {
const png = await readPNG(argv[0]);
const buff = pngToIIgsBuff(png);
const options = {
staticClip: true,
label: 'Sprite001'
};
startIndex = getArg(argv, '--start-index', x => parseInt(x, 10), 0);
asTileData = getArg(argv, '--as-tile-data', null, 0);
maxTiles = getArg(argv, '--max-tiles', x => parseInt(x, 10), 64);
}
function getArg(argv, arg, fn, defaultValue) {
for (let i = 0; i < argv.length; i += 1) {
if (argv[i] === arg) {
if (fn) {
return fn(argv[i+1]);
}
return true; // Return true if the argument was found
}
}
return defaultValue;
}
function buildMerlinCodeForSprite(sprite, options) {
const { label, staticClip } = options;
const rtnOpCode = options.longReturn ? 'rtl' : 'rts';
const sb = new StringBuilder();
sb.appendLine(`${label} ENT`);
sb.appendLine(` cpx #${sprite.height * 2}`);
sb.appendLine(` bcc *+3`);
sb.appendLine(` ${rtnOpCode}`);
sb.appendLine(` sei`);
sb.appendLine(` tcs`);
sb.appendLine(` jmp (${label}_jtbl,x)`);
sb.appendLine(`${label}_jtbl`);
for (let line = 0; line < sprite.rows.length; line += 1) {
lda DP ; A = $1234
* eor #DATA ; A = $4444
* and #~MASK ; A = $4440
* and screen_mask,y ; A = $4400
* and >field_mask,x ; A = $4000
* eor DP ; A = $5234 <-- Only the high nibble is set to the sprite data
* sta DP
sb.appendLine(` dw ${label}_${line}`);
}
// Implement each line to draw the sprite data
//
// label_XX tdc
// clc
// adc #160*line
// tcd
// main_XX lda 00
// and #
// ora #
//
for (let line = 0; line < sprite.rows.length; line += 1) {
}
return sb.toString();
}

View File

@ -8,6 +8,7 @@ const StringBuilder = require('string-builder');
let startIndex = 0;
let transparentColor = 0;
let transparentIndex = -1;
let maxTiles = 511;
main(process.argv.slice(2)).then(
() => process.exit(0),
@ -92,6 +93,18 @@ function pngToIIgsBuffRepeat(png) {
return buff;
}
function paletteToHexString(palette) {
const r = Math.round(palette[0]);
const g = Math.round(palette[1]);
const b = Math.round(palette[2]);
return (
r.toString(16).toUpperCase().padStart(2, '0') +
g.toString(16).toUpperCase().padStart(2, '0') +
b.toString(16).toUpperCase().padStart(2, '0')
);
}
function paletteToIIgs(palette) {
const r = Math.round(palette[0] / 17);
const g = Math.round(palette[1] / 17);
@ -133,10 +146,12 @@ async function main(argv) {
startIndex = getArg(argv, '--start-index', x => parseInt(x, 10), 0);
asTileData = getArg(argv, '--as-tile-data', null, 0);
maxTiles = getArg(argv, '--max-tiles', x => parseInt(x, 10), 64);
maxTiles = getArg(argv, '--max-tiles', x => parseInt(x, 10), 511);
transparentColor = getArg(argv, '--transparent-color-index', x => parseInt(x, 10), -1);
transparentIndex = transparentColor;
if (transparentColor !== -1) {
transparentIndex = transparentColor;
}
console.info(`; startIndex = ${startIndex}`);
@ -150,6 +165,17 @@ async function main(argv) {
return;
}
// Get the RGB triplets from the palette
const palette = png.palette.map(c => paletteToHexString(c));
transparentColorTriple = getArg(argv, '--transparent-color', x => x, null);
if (transparentColorTriple) {
console.log('; Looking for transparent color', transparentColorTriple);
transparentIndex = palette.findIndex(p => p === transparentColorTriple);
if (transparentIndex !== -1) {
console.log('; found color at palette index', transparentIndex);
}
}
// Dump the palette in IIgs hex format
console.log('; Palette:');
const hexCodes = png.palette.map(c => '$' + paletteToIIgs(c));
@ -277,12 +303,10 @@ function buildTile(buff, width, x, y, transparentIndex = -1) {
function buildTiles(buff, width, transparentIndex = -1) {
const tiles = [];
const MAX_TILES = 240;
let count = 0;
for (let y = 0; ; y += 8) {
for (let x = 0; x < width; x += 4, count += 1) {
if (count >= MAX_TILES) {
if (count >= maxTiles) {
return tiles;
}
const tile = buildTile(buff, width, x, y, transparentIndex);

View File

@ -197,6 +197,9 @@ function findAnimatedTiles(tileset) {
return animations;
}
// Global reference object
let GLOBALS = {};
/**
* Command line arguments
*
@ -246,6 +249,13 @@ async function main(argv) {
// Load up any/all tilesets
const tileSets = await Promise.all(doc.tilesets.map(tileset => loadTileset(workdir, tileset)));
// Create a global reference object
GLOBALS = {
outdir,
tileSets,
tileLayers
};
// Save all of the tilesets
let bg0TileSet = null;
@ -396,9 +406,17 @@ function convertTileID(tileId, tileset) {
throw new Error('A maximum of 511 tiles are supported');
}
if (tileIndex === 0) {
// This should be a warning
return 0;
}
// The tileId starts at one, but the tile set starts at zero. It's ok when we export,
// because a special zero tile is inserted, but we have to manually adjust here
const mask_bit = !tileset[tileIndex - 1].isSolid;
if (!tileset[tileIndex - 1]) {
throw new Error(`Tileset for tileId ${tileIndex} is underinfed`);
}
const mask_bit = (!tileset[tileIndex - 1].isSolid) && (GLOBALS.tileLayers.length !== 1);
// Build up a partial set of control bits
let control_bits = (mask_bit ? GTE_MASK_BIT : 0) + (hflip ? GTE_HFLIP_BIT : 0) + (vflip ? GTE_VFLIP_BIT : 0);