AQUASNAKE 周期性发作抖料之三:《一卡多号程序源码》
时间:10-02
整理:3721RD
点击:
一卡多号程序源码!
;********************************************************************
; GSM a38 Silver Wafer card v1.06 by Dejan Kaljevic 1996-2001
;
;********************************************************************
list p=16f876,f=inhx8m,r=dec
__fuses H'3f39'
include dex1.mac
indf equ 0
tmr0 equ 1
pcl equ 2
status equ 3
fsr equ 4
porta equ 5
portb equ 6
portc equ 7
pclath equ 0ah
intcon equ 0bh
ccp2con equ 1dh
adcon0 equ 1fh
option_reg equ 81h
trisa equ 85h
trisb equ 86h
trisc equ 87h
irp equ 7
rp1 equ 6
rp0 equ 5
not_to equ 4
not_pd equ 3
z equ 2
dc equ 1
c equ 0
gie equ 7
peie equ 6
t0ie equ 5
inte equ 4
rbie equ 3
t0if equ 2
intf equ 1
rbif equ 0
port_a equ porta
port_b equ portb
tris_a equ trisa
tris_b equ trisb
pc equ pcl
;*********************************************************
r0 equ 70h
r1 equ 71h
r2 equ 72h
r3 equ 73h
r4 equ 74h
r5 equ 75h
r6 equ 76h
r7 equ 77h
ee_adr equ 78h
ee_adr_l equ 79h
ee_adr_h equ 7ah
ee_data_l equ 7bh
ee_data_h equ 7ch
i2c_count equ 7dh
i2c_reg equ 7eh
iso_fleg equ 20h
rxtx_count equ 21h
tx_reg equ 22h
rx_reg equ 22h
temp_tx equ 23h
wait_reg equ 24h
d1 equ 30h
d2 equ 31h
d3 equ 32h
d4 equ 33h
sel_f1 equ 25h
sel_f2 equ 26h
sel_t1 equ 28h
dir_1 equ 29h
sel_t2 equ 2ah
dir_2 equ 2bh
rec_no equ 2ch
prov_num equ 2dh
resp_fleg equ 2eh
cla equ r0
ins equ r1
p1 equ r2
p2 equ r3
p3 equ r4
i equ 50h
j equ r7
k equ r6
l equ r5
m equ 51h
xm equ 52h
xn equ 53h
t1 equ 54h
t2 equ 55h
temp_k equ 56h
dest_index equ xm
acc equ 57h
sres equ 30h
rnd equ 40h
;************************************************
org 0
;************************************************
start call wait2
clr iso_fleg
movlw 0ffh
movwf port_a
movwf port_b
bank1
movlf adcon0,6 ;for 16f876 port a = digital
movlw 7fh
movwf option_reg
movlw 0ffh
movwf tris_a
movlw 01001111b
movwf tris_b
bank0
;---------------------------------------
call wait1
;-------------------------------------- Send ATR
movlf r7,12h ;size of ATR
movlf ee_adr,atr
call rd_eeprom
xorlw 3fh
jnz no_inv
bsf iso_fleg,0
no_inv: call rd_eeprom
incf ee_adr
call send_byte
djnz r7,no_inv
;================================================
main call wait
movlf r7,5
movlf fsr,cla
call read__data ;get cla,ins,p1,p2,p3
call wait
;------------------------------------------------
cmp cla,0a0h
jnz bad_cla
;================================= CLA A0
movf ins,w
xorlw 0a4h ;cmp ins,0a4h
je select_file
xorlw 84h ;cmp ins,20h
je verify_pin
xorlw 90h ;cmp ins,0b0h
je rd_wr_bin
xorlw 70h ;cmp ins,0c0h
je send_response
xorlw 16h ;cmp ins,0d6h
je rd_wr_bin
xorlw 24h ;cmp ins,0f2h
je _status
xorlw 40h ;cmp ins,0b2h
je rd_wr_record
xorlw 6eh ;cmp ins,0dch
je rd_wr_record
xorlw 54h ;cmp ins,88h
je a38
xorlw 72h ;cmp ins,0fah ;sleep
je ok_end
xorlw 4 ;cmp ins,0feh
je update_ki
jmp bad_ins
;======================================
send_ins call wait
movf ins,w
jmp send_byte
;======================================
; d1=data bafer
; r7=count
;--------------------------------------
read_data movlf fsr,d1
;--------------------------------------
; fsr=addr
; r7=count
;--------------------------------------
read__data call get_byte
movwf 0
incf fsr
djnz r7,read__data
ret
;--------------------------------------
bad_p1p2 movlw 6bh ;6b00h
jmp send_ans0
bad_p3 movlw 67h ;6700h
jmp send_ans0
err_9408 movlf r0,8
jmp send_94
bad_cla movlw 6eh
jmp send_ans0
bad_ins movlw 6dh
jmp send_ans0
ok_end
send_ok movlw 90h
send_ans0 clr r0
send_answer movwf temp_tx
call wait
movf temp_tx,w
call send_byte
movf r0,w
call send_byte
jmp main
;***************************************
; RET w=char
;---------------------------------------
get_byte bank1
bsf tris_b,7 ;in
bank0
l_lev jnb port_b,7,l_lev ;wait for H
h_lev jb port_b,7,h_lev ;wait for L (start impuls)
movlf rxtx_count,9
bcf iso_fleg,1 ;reset parity fleg
jb port_b,7,h_lev ;wait for L
call wait05 ;[372/4/2-9] wait to midle of start impuls
nex_rx_bit btfsc iso_fleg,0 ;1(2)
rlf rx_reg ;1(0)
btfss iso_fleg,0 ;2(1)
rrf rx_reg ;0(1)
call wait1 ;2 [372/4-15]
jnb port_b,7,low_l ;2(3)
;--------------------------
movlw 2 ;1
xorwf iso_fleg ;1 ;parity
nop ;1
stc ;1
low_e djnz rxtx_count,nex_rx_bit ;3
rrf iso_fleg,w
xorwf iso_fleg,w
andlw 1
jnz bad_parity
btfsc iso_fleg,0
comf rx_reg
movf rx_reg,w
ret
low_l clc ;1
jmp low_e ;2
bad_parity call wait1
bank1
bcf tris_b,7 ;out
bank0
bcf port_b,7 ;i/o=0
call wait1
bsf port_b,7 ;i/o=1
bank1
bsf tris_b,7 ;in
call wait05
jmp get_byte
;**************************************
; W = char
send_byte movwf temp_tx
movwf tx_reg
btfsc iso_fleg,0
comf tx_reg
movlf rxtx_count,9
bcf iso_fleg,1 ;reset parity fleg
call wait05
bank1
bsf tris_b,7 ;in
bank0
tx_l jnb port_b,7,tx_l
clc
;---------------
nex_tx_bit jc tx_high ;2(3)
call tx_lo ;2+7
jmp tx_e ;2
tx_high call tx_hi ;2+5
movlw 2 ;1
xorwf iso_fleg ;1 ;parity
nop ;1
tx_e call wait11 ;2 + (372/4-22)
btfsc iso_fleg,0 ;1(2)
rlf tx_reg ;1(0)
btfss iso_fleg,0 ;2(1)
rrf tx_reg ;0(1)
djnz rxtx_count,nex_tx_bit ;3
;---------------
rrf iso_fleg,w ;send parity
xorwf iso_fleg,w
andlw 1
jnz par_s
call tx_lo
jmp end_par
par_s call tx_hi
end_par call wait1
;---------------
call tx_hi ;stop impuls
call wait1
jnb port_b,7,error_tx
call wait2
ret
error_tx call wait2
movf temp_tx,w
jmp send_byte ;try again
;--------------------------------------- out = L
tx_lo bcf port_b,7 ;1 out=0
bank1 ;1
bcf tris_b,7 ;1 ;out
bank0 ;1
bcf port_b,7 ;1 ;out=0
ret ;2
;---------------------------------------
tx_hi bank1 ;1
bsf tris_b,7 ;1 ;in (i/o=1)
bank0 ;1
ret ;2
;---------------------------------------
wait05 ;37 ins
movlf wait_reg,10
jmp _wait3
wait11 ;71 ins
movlf wait_reg,22
jmp _wait1
wait1 ;78 ins
movlf wait_reg,24
nop
_wait3 nop
_wait2 nop
_wait1 djnz wait_reg,_wait1 ;3*wait_reg+1
ret
wait
wait2 ;182 ins
movlf wait_reg,59
jmp _wait1
sda equ 4
scl equ 5
;------------------------------------- 8 ins
start_i2c bsf port_b,scl ;scl=1
bsf port_b,sda ;sda=1
nop
bcf port_b,sda ;sda=0
nop
bcf port_b,scl ;scl=0
ret
;------------------------------------- 9 ins
bit_out btfss status,c ;1(2)
bcf port_b,sda ;1(0)
btfsc status,c ;2(1)
bsf port_b,sda ;0(1)
bsf port_b,scl
nop
bcf port_b,scl
ret
;------------------------------------- 10 ins
bit_in bank1
bsf tris_b,sda
bank0
bsf port_b,scl
clc
btfsc port_b,sda
stc
bcf port_b,scl
ret
;------------------------------------- 138 ins
tx_i2c movlf i2c_count,8 ;2
tx_i2 rlf i2c_reg ;1 ;15*8-1
call bit_out ;11
djnz i2c_count,tx_i2 ;3(2)
call bit_in ;12
sda_out bank1 ;1
bcf tris_b,sda ;1
bank0 ;1
ret ;2
;------------------------------------- 136 ins
rx_i2c movlf i2c_count,8 ;2
rx_i2 call bit_in ;12 ;16*8-1
rlf i2c_reg ;1
djnz i2c_count,rx_i2 ;3(2)
jmp sda_out ;2
;--------------------------------------
rd_i2c_wr_addr: call start_i2c
movlf i2c_reg,0a0h
call tx_i2c
movff i2c_reg,ee_adr_h
call tx_i2c
movff i2c_reg,ee_adr_l
call tx_i2c
bcf port_b,sda
call stop_i2c
call start_i2c
movlf i2c_reg,0a1h
call tx_i2c
ret
rd_i2c_last: call rx_i2c
stc
call bit_out
call stop_i2c
movf i2c_reg,w
ret
;--------------------------------------
stop_i2c bcf port_b,sda ;sda=0
nop
bsf port_b,scl ;scl=1
nop
bsf port_b,sda ;sda=1
ret
;**************************************
wr_i2c: movwf r0
call start_i2c
movlf i2c_reg,0a0h
call tx_i2c
movff i2c_reg,ee_adr_h
call tx_i2c
movff i2c_reg,ee_adr_l
call tx_i2c
movff i2c_reg,r0
call tx_i2c
bcf port_b,sda
;call time
call stop_i2c
nex_pprr: call start_i2c
movlf i2c_reg,0a0h
call tx_i2c
call stop_i2c
jc nex_pprr
ret
;************************************************
select_file movf p1,w
iorwf p2,w
jnz bad_p1p2
cmp p3,2
jnz bad_p3
call send_ins ;OK p1=0,p2=0,p3=2
movlf r7,2
call read_data ;get File ID
;---------------------------------------
cmp d1,3fh
jnz no_mf
movf d2
jnz no_mf ;selected MF
ok_df movlf r0,16h
movff dir_1,d1
movff dir_2,d2
;======================================
send_9fa movff sel_f1,d1
movff sel_f2,d2
clrf rec_no
incf rec_no
bcf resp_fleg,0
;===============
send_9f movlw 9fh
jmp send_answer
;--------------------------------------
no_mf cmp d1,7fh
jnz no_df
cmp d2,10h
jz ok_df ;select DF
cmp d2,20h
jz ok_df
cmp d2,21h
jz ok_df
;--------------------------------------
no_df cmp d1,6fh
jz _ef
cmp d1,2fh
jnz err_9404
cmp d2,0e2h
jnz err_9404
_ef movf d2,w
call test_file
jz err_9404
ok_eef movlf r0,0fh
jmp send_9fa ;select EF (6fxx) or (2fxx)
;=======================================
err_9404 movlf r0,4
send_94 movlw 94h
jmp send_answer
;************************************************
;w=file to test (low byte)
;
;RET z=1 file not found
; z=0 OK r0=index to selected file data
; w=file type
;------------------------------------------------
test_file movwf r0
movlf ee_adr,ef_info
movlf ee_adr_h,0
movlf ee_adr_l,file_data
;---------------
test_file_ call rd_eeprom
andlw 0ffh
jz end_tf ;file is not found in table
xorwf r0,w
jz end_tsf ;file is found
;---------------
incf ee_adr
call rd_eeprom
incf ee_adr
addlw 1 ;get file data addr.
movwf r5
call get_data7 ;file size h
addlw 1
je test_file_ ;skip for IMSI & Kc
incf r5,w
call get_data7 ;file size l
addwf ee_adr_l
btfsc status,c
incf ee_adr_h
movf r5,w
call get_data7 ;file size h
addwf ee_adr_h
jmp test_file_
;--------------------------------------
end_tsf: incf ee_adr
call rd_eeprom ;addr of selected file info
movwf r0
call get_data7
bcf status,z
end_tf ret
;--------------------------------------
;************************************************
_status: movff sel_t1,dir_1
movff sel_t2,dir_2
jmp s_res
;************************************************
send_response: movff sel_t1,sel_f1
movff sel_t2,sel_f2
s_res: call send_ins ;always OK
jb resp_fleg,0,resp_ram ;a38 response
;---------------
cmp sel_t1,3fh
jne no__mf
movlf r0,mf_d
jmp send_resp ;MF
no__mf cmp sel_t1,7fh
jne no__df
movlf r0,df_d
jmp send_resp ;DF
no__df cmp sel_f1,6fh
je resp_ef ;EF (6fxx)
cmp sel_f1,2fh
je resp_ef ;EF (2fxx)
;---------------
send_zeros clrw
call send_byte
djnz p3,send_zeros
jmp ok_end
;--------------------------------------
resp_ram: movlf fsr,sres
rsp_ram: movf 0,w
call send_byte
incf fsr
djnz p3,rsp_ram
jmp ok_end
;************************************************
send_resp movwf r5
clr r7
nex_srr cmp r7,5
jnz no_inf
movf sel_t2,w
jmp noo_inf
no_inf movf r5,w
call get_data7
noo_inf call send_byte
incf r7
incf r5
djnz p3,nex_srr
jmp ok_end
;---------------------------------------
;************************************************
resp_ef movf sel_f2,w
call test_file ;R0 - point to file response data
movwf r6
incf r0
;----------------------------
movlw 85h
call send_byte
movlw 0dh
call send_byte ;send 85 0d
;---------------
movf r0,w
call get_data7
addlw 1
movlw 2
jnz no_ef_t1 ;no IMSI & Kc
clrw
call send_byte
incf r0
movlw 1
no_ef_t1: movwf r7
call send_r0 ;send file size
;---------------
movf sel_f1,w
call send_byte
movf sel_f2,w
call send_byte ;send file ID
;---------------
cmp r6,4
jz _ef_t1
movlf r7,9
call send_r0
jmp ok_end
;----------------------------
_ef_t1: movlw 4
call send_byte
movlw 0
call send_byte ;send 04 00
movlf r7,1
call send_r0
movlf r7,6
movlf r0,ef_d
call send_r0
jmp ok_end
;--------------------------------------
;**************************************
; r0=index in table3
; r7=count
;--------------------------------------
send_r0 movf r0,w
call get_data7
call send_byte
incf r0
djnz r7,send_r0
ret
;--------------------------------------
block_file: movf prov_num,w
addwf prov_num,w
movwf r6
rlf r6
rlf r6,w
addwf prov_num,w ;w=prov_num * 9
addwf ee_adr_l
btfsc status,c
incf ee_adr_h
ret
;************************************************
rd_wr_bin movf sel_f2,w
call test_file
jz err_9408
xorlw 4
jnz err_9408 ;Not selected transparent file
;---------------
cmp sel_f2,7h ;IMSI file
jnz no_imsi
clrf ee_adr_h
movlf ee_adr_l,_imsi
call block_file ;select appropriate IMSI
jmp no_kc
;---------------
no_imsi: cmp sel_f2,20h ;Kc file
jnz no_kc
clrf ee_adr_h
movlf ee_adr_l,_kc
call block_file ;select appropriate Kc
;---------------
no_kc: movf p2,w
addwf ee_adr_l
btfsc status,c
incf ee_adr_h
cmp ins,0d6h
jz write_file
jmp read_file
;************************************************
rd_wr_record: movf sel_f2,w
call test_file
jz err_9408
xorlw 4
jz err_9408 ;transparent file selected
cmp sel_f2,3ah
jne no_3a
movlf ee_adr_h,8
clrf ee_adr_l
no_3a:
;--------------------------------------
decf p2 ;mode
decf p2
je inc_rec_no
decf p2
je dec_rec_no
djnz p2,err_9408
movf p1,w
btfss status,z
movwf rec_no
jmp ok_rcc
dec_rec_n decf rec_no
jmp ok_rcc
inc_rec_n incf rec_no
;---------------
ok_rcc: movf rec_no,w
movwf r6
movlw 0bh
addwf r0,w
call get_data7
jmp nex_rd_r1
nex_aad: addwf ee_adr_l
btfsc status,c
incf ee_adr_h
nex_rd_r1: djnz r6,nex_aad
cmp sel_f2,3ah
je fl_3a
cmp ins,0dch
je write_file
;======================================
read_file: call send_ins
call rd_i2c_wr_addr
nex_rd_r: decf p3,w
jz last_rd
decf p3
call rx_i2c
clc
call bit_out
movf i2c_reg,w
call send_byte
jmp nex_rd_r
last_rd: call rd_i2c_last
call send_byte
jmp ok_end
fl_3a: cmp ins,0dch
je write_file_fl
read_file_fl: call send_ins
rd_fl1: call rd_flash
movf ee_data_l,w
call send_byte
incf ee_adr_l
btfsc status,z
incf ee_adr_h
djnz p3,rd_fl1
jmp ok_end
write_file_fl: comf ins,w
call send_byte
call get_byte
movwf ee_data_l
clrf ee_data_h
call wr_flash
incf ee_adr_l
btfsc status,z
incf ee_adr_h
djnz p3,write_file_fl
jmp ok_end
;======================================
update_ki: cmp p1,'D'
jnz bad_p1p2
cmp p2,'K'
jnz bad_p1p2
cmp p3,16
jnz bad_p3
swapf prov_num,w
andlw 70h
addlw _ki
movwf ee_adr
write_ki: comf ins,w
call send_byte
call get_byte
call wr_eeprom
incf ee_adr
djnz p3,write_ki
jmp ok_end
;======================================
write_file: comf ins,w
call send_byte
call get_byte
call wr_i2c
incf ee_adr_l
btfsc status,z
incf ee_adr_h
djnz p3,write_file
jmp ok_end
;**************************************
verify_pin cmp p3,8
jne bad_p3
call send_ins
movlf r7,8
call read_data
;-------------------------------------
movlw 0fh
andwf d1
andwf d2
andwf d3
andwf d4
swapf d1,w
iorwf d2
swapf d3,w
iorwf d4,w ;d2:d4=PIN
addlw 0ffh
andlw 7
movwf prov_num ;Select provider from 4'th pin digit
jmp ok_end
eedata equ 10ch
eeadr equ 10dh
eedath equ 10eh
eeadrh equ 10fh
eecon1 equ 18ch
eecon2 equ 18dh
rd equ 0
wr equ 1
wren equ 2
wrerr equ 3
eepgd equ 7
;ee_adr
rd_eeprom: bsf status,rp1
bcf status,rp0
movff eeadr,ee_adr
bsf status,rp0
bcf eecon1,eepgd
bsf eecon1,rd
bcf status,rp0
movf eedata,w
bcf status,rp1
ret
;ee_adr
wr_eeprom: bsf status,rp1
bcf status,rp0
movwf eedata
movff eeadr,ee_adr
bsf status,rp0
bcf eecon1,eepgd
bsf eecon1,wren
;bcf intcon,gie
movlw 55h
movwf eecon2
movlw 0aah
movwf eecon2
bsf eecon1,wr
w_wr: jb eecon1,wr,w_wr
;bsf intcon,gie
;sleep
bcf eecon1,wren
;bcf intcon,gie
bank_0: bcf status,rp1
bcf status,rp0
ret
rd_flash: bsf status,rp1
bcf status,rp0
movff eeadr,ee_adr_l
movff eeadrh,ee_adr_h
bsf status,rp0
bsf eecon1,eepgd
bsf eecon1,rd
nop
nop
bcf status,rp0
movff ee_data_h,eedath
movff ee_data_l,eedata
jmp bank_0
wr_flash: bsf status,rp1
bcf status,rp0
movff eeadr,ee_adr_l
movff eeadrh,ee_adr_h
movff eedata,ee_data_l
movff eedath,ee_data_h
bsf status,rp0
bsf eecon1,eepgd
bsf eecon1,wren
bcf intcon,gie
movlw 55h
movwf eecon2
movlw 0aah
movwf eecon2
bsf eecon1,wr
nop
nop
bcf eecon1,wren
jmp bank_0
;**************************************
; MoU A38 chiphering algorithm
;--------------------------------------
a38:
;movf p1,w
;iorwf p2,w
;jnz bad_p1p2
cmp p3,16
jnz bad_p3
bsf resp_fleg,0
call send_ins ;OK p1=0,p2=0,p3=16
movff r7,p3
movlf fsr,40h
call read__data ;get RND
;================================================
movlf i,7
next_i
;****************************************
; Copy Ki
;----------------------------------------
movlf fsr,sres
movlf r7,16
swapf prov_num,w
andlw 70h
addlw _ki
movwf ee_adr
nex_mov_ki call rd_eeprom
movwf 0
incf ee_adr
incf fsr
djnz r7,nex_mov_ki
;**************************************
movlf j,4
movlf t2,1
movlf t1,16
;--------------------------------------
next_j clrf temp_k
decf t2,w
movwf k ;k=t2-1
;--------------------------------------
next_k decf t1,w
movwf l ;l=t1-1
;--------------------------------------
next_l movf l,w
addwf temp_k,w
movwf m
;-------------------------------
addlw sres
movwf fsr ;fsr=sres+M
movff xm,0 ;XM=[sres+M]
movf t1,w ;N=M+T1
addwf fsr ;fsr=sres+N
movff xn,0 ;XN=[sres+N]
movf xm,w
call add_wx ;w = [((w+xm+xn) AND (2^9-J)-1) + table [J]]
movwf 0 ;[sres+N]=w
movf t1,w
subwf fsr ;fsr=sres+M
movf xn,w
call add_wx ;w = [((w+xm+xn) AND (2^9-J)-1) + table [J]]
movwf 0 ;[sres+M]=w
;-------------------------------
decf l
jnb l,7, next_l
;===============================
clc
rlf t1,w ;w=t1*2
addwf temp_k ;temp_k=temp_k+t1*2
decf k
jnb k,7, next_k
;===============================
clc
rlf t2 ;t2=t2*2
rrf t1 ;t1=t1/2
decf j
jnb j,7, next_j
;===============================
;--------------------------------------
movlf fsr,sres
movlf r5,2
movlf r7,16
nex_mov1 swapf 0,w
incf fsr
iorwf 0,w
movwf r6
incf fsr
movf r5,w
subwf fsr
movff 0,r6
movf r5,w
addwf fsr
incf r5
djnz r7,nex_mov1
;--------------------------------------
movf i
jz end_a38
;---------------
movlf j,16
movlf dest_index,sres+16
clrf l
nex_bit1 movlf t2,80h
movlf k,8
clrf m
nex_bit2 rlf l,w
movwf t1
swapf t1
movlw 0fh
andwf t1 ;t1=l/8
movlw sres
addwf t1,w
movwf fsr ;fsr=sres+l/8 and 15
movf 0,w
andwf t2,w
iorwf m
clc
rrf t2 ;shr t2
movlw 17
addwf l
djnz k,nex_bit2
movff fsr,dest_index
movff 0,m
incf dest_index
djnz j,nex_bit1
;--------------------------------------
decf i
jmp next_i
;======================================
end_a38 movlf r6,2
nex_rt1 movlf fsr,sres+15
movlf r7,7
clc
nex_rt2 rlf 0
decf fsr
djnz r7,nex_rt2
djnz r6,nex_rt1
;--------------------------------------
movlf r7,7
movlf fsr,sres+9
nex_rt3 movff r6,0
movlw 5
subwf fsr
movff 0,r6
movlw 6
addwf fsr
djnz r7,nex_rt3
clrf sres+11
clrf pclath
movlf r0,0ch
jmp send_9f
org 400h
dt 102,177,186,162, 2,156,112, 75, 55, 25, 8, 12,251,193,246,188
dt 109,213,151, 53, 42, 79,191,115,233,242,164,223,209,148,108,161
dt 252, 37,244, 47, 64,211, 6,237,185,160,139,113, 76,138, 59, 70
dt 67, 26, 13,157, 63,179,221, 30,214, 36,166, 69,152,124,207,116
dt 247,194, 41, 84, 71, 1, 49, 14, 95, 35,169, 21, 96, 78,215,225
dt 182,243, 28, 92,201,118, 4, 74,248,128, 17, 11,146,132,245, 48
dt 149, 90,120, 39, 87,230,106,232,175, 19,126,190,202,141,137,176
dt 250, 27,101, 40,219,227, 58, 20, 51,178, 98,216,140, 22, 32,121
dt 61,103,203, 72, 29,110, 85,212,180,204,150,183, 15, 66,172,196
dt 56,197,158, 0,100, 45,153, 7,144,222,163,167, 60,135,210,231
dt 174,165, 38,249,224, 34,220,229,217,208,241, 68,206,189,125,255
dt 239, 54,168, 89,123,122, 73,145,117,234,143, 99,129,200,192, 82
dt 104,170,136,235, 93, 81,205,173,236, 94,105, 52, 46,228,198, 5
dt 57,254, 97,155,142,133,199,171,187, 50, 65,181,127,107,147,226
dt 184,218,131, 33, 77, 86, 31, 44, 88, 62,238, 18, 24, 43,154, 23
dt 80,159,134,111, 9,114, 3, 91, 16,130, 83, 10,195,240,253,119
org 500h
dt 19, 11, 80,114, 43, 1, 69, 94, 39, 18,127,117, 97, 3, 85, 43
dt 27,124, 70, 83, 47, 71, 63, 10, 47, 89, 79, 4, 14, 59, 11, 5
dt 35,107,103, 68, 21, 86, 36, 91, 85,126, 32, 50,109, 94,120, 6
dt 53, 79, 28, 45, 99, 95, 41, 34, 88, 68, 93, 55,110,125,105, 20
dt 90, 80, 76, 96, 23, 60, 89, 64,121, 56, 14, 74,101, 8, 19, 78
dt 76, 66,104, 46,111, 50, 32, 3, 39, 0, 58, 25, 92, 22, 18, 51
dt 57, 65,119,116, 22,109, 7, 86, 59, 93, 62,110, 78, 99, 77, 67
dt 12,113, 87, 98,102, 5, 88, 33, 38, 56, 23, 8, 75, 45, 13, 75
dt 95, 63, 28, 49,123,120, 20,112, 44, 30, 15, 98,106, 2,103, 29
dt 82,107, 42,124, 24, 30, 41, 16,108,100,117, 40, 73, 40, 7,114
dt 82,115, 36,112, 12,102,100, 84, 92, 48, 72, 97, 9, 54, 55, 74
dt 113,123, 17, 26, 53, 58, 4, 9, 69,122, 21,118, 42, 60, 27, 73
dt 118,125, 34, 15, 65,115, 84, 64, 62, 81, 70, 1, 24,111,121, 83
dt 104, 81, 49,127, 48,105, 31, 10, 6, 91, 87, 37, 16, 54,116,126
dt 31, 38, 13, 0, 72,106, 77, 61, 26, 67, 46, 29, 96, 37, 61, 52
dt 101, 17, 44,108, 71, 52, 66, 57, 33, 51, 25, 90, 2,119,122, 35
org 600h
dt 52, 50, 44, 6, 21, 49, 41, 59, 39, 51, 25, 32, 51, 47, 52, 43
dt 37, 4, 40, 34, 61, 12, 28, 4, 58, 23, 8, 15, 12, 22, 9, 18
dt 55, 10, 33, 35, 50, 1, 43, 3, 57, 13, 62, 14, 7, 42, 44, 59
dt 62, 57, 27, 6, 8, 31, 26, 54, 41, 22, 45, 20, 39, 3, 16, 56
dt 48, 2, 21, 28, 36, 42, 60, 33, 34, 18, 0, 11, 24, 10, 17, 61
dt 29, 14, 45, 26, 55, 46, 11, 17, 54, 46, 9, 24, 30, 60, 32, 0
dt 20, 38, 2, 30, 58, 35, 1, 16, 56, 40, 23, 48, 13, 19, 19, 27
dt 31, 53, 47, 38, 63, 15, 49, 5, 37, 53, 25, 36, 63, 29, 5, 7
dt 1, 5, 29, 6, 25, 1, 18, 23, 17, 19, 0, 9, 24, 25, 6, 31
dt 28, 20, 24, 30, 4, 27, 3, 13, 15, 16, 14, 18, 4, 3, 8, 9
dt 20, 0, 12, 26, 21, 8, 28, 2, 29, 2, 15, 7, 11, 22, 14, 10
dt 17, 21, 12, 30, 26, 27, 16, 31, 11, 7, 13, 23, 10, 5, 22, 19
;org 700h
;======================================
_j1 ;bcf pclath,0 ;table1 page4
bcf pclath,1
movf acc,w
clrf acc
addwf xn,w ;w=w+XN
btfsc status,c
incf acc
addwf xm,w ;w=w+XN+XM
btfsc status,c
incf acc
bcf acc,1
xorwf acc,w
movwf pc
;-----------------------
add_wx movwf acc
movlf pclath,6 ;page 6
movf J,w
call pc_table
movwf pc ;jmp [pc_table+J] page7
;-----------------------
;-----------------------
pc_table addwf pc
dt j5,j4,j3,j2,_j1
;-----------------------
;-----------------------
w_add movf acc,w
addwf xn,w ;w=acc+XN
addwf xm,w ;w=acc+XN+XM
ret
;-----------------------
j2 bcf pclath,1 ;table2 page 5
bsf pclath,0
call w_add ;j=2
movwf pc
;-----------------------
j3 ;bcf pclath,0 ;table3 page 6
call w_add ;j=3
andlw 7fh
movwf pc
;-----------------------
j4 ;bcf pclath,0 ;table4 page 6
call w_add ;j=4
andlw 3fh
addlw 80h
movwf pc
;-----------------------
j5 call w_add ;table5
;j=5
movwf ee_adr_l
rrf ee_adr_l,w
andlw 0fh
addlw _table_5
call get_data7
movwf ee_adr_h
btfsc ee_adr_l,0
swapf ee_adr_h
swapf ee_adr_h,w
andlw 0fh
ret
;-------------------------------------------------------------
org 700h
get_data7 bsf pclath,0
bsf pclath,1
bsf pclath,2
movwf pc
_table_5 dt 0fch,0a4h,1eh,0b7h,50h,0e7h,12h,0d8h
dt 0a3h,49h,60h,32h,56h,89h,0bdh,0fch
mf_d dt 85h,14h,1,0f0h,3fh,0,1,80h,0,0ffh,0ffh,43h,9,9,2,5
dt 4,0,83h,8ah,83h,8ah
df_d dt 85h,14h,0,30h,7fh,10h,2,80h,0,0fbh,0ffh,3,9,9,0,14
dt 4,0,83h,8ah,83h,8ah
ef_d dt 0ffh,0bbh,3,2,0,0
_5 dt 4, 0,4, 1
_7 dt 4, 0ffh,9, 1bh
_20 dt 4, 0ffh,9, 11h
_30 dt 4, 0,2dh, 11h
_31 dt 4, 0,1, 1bh
_37 dt 4, 0,3, 12h
_38 dt 4, 0,4, 1bh
_41 dt 4, 0,5, 1bh
_43 dt 4, 0,2, 11h
_45 dt 4, 0,0ah, 12h
_74 dt 4, 0,10h, 11h
_78 dt 4, 0,2, 1bh
_7b dt 4, 0,0ch, 11h
_7e dt 4, 0,0bh, 11h
_ad dt 4, 0,3, 0bh
_ae dt 4, 0,1, 0bh
_e2 dt 4, 0,0ah, 0fh
_3a dt 14h, 17h,0f4h, 04, 00, 11h, 0FBh, 22h, 03, 02, 01, 1Ch
_3c dt 14h, 1ch,0e0h, 04, 00, 11h, 0FBh, 0BBh, 03, 02, 01, 0B0h
_3d dt 14h, 0,38h, 04, 00, 11h, 0FBh, 0BBh, 03, 02, 01, 0Eh
_40 dt 14h, 0,70h, 04, 00, 11h, 0fbh, 0bbh, 03, 02, 01, 1ch
_42 dt 14h, 1,40h, 04, 00, 11h, 0fbh, 0bbh, 03, 02, 01, 28h
_39 dt 34h, 0,3, 04, 40h, 12h, 1Bh, 0BBh, 83h, 02, 03, 03
org 2100h
_ki de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
atr de 3fh,2fh,0,80h,69h,0afh,2,4,1,31h,0,0,0,0eh,83h,3eh,9fh,16h
ef_info de 7,_7,0e2h,_e2, 5,_5,20h,_20,30h,_30,31h,_31,37h,_37
de 38h,_38,41h,_41,43h,_43,45h,_45,74h,_74,78h,_78
de 7bh,_7b,7eh,_7e,0adh,_ad,0aeh,_ae
de 39h,_39,3dh,_3d,40h,_40,42h,_42,3ch,_3c,3ah,_3a
de 0
org 4000h
_imsi de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
_kc de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
file_data de 98h,83h,11h,11h,11h,11h,11h,11h,11h,0f1h ;e2
de 1,0ffh,0ffh,0ffh ;05
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;30
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh ;31
de 0,0,0 ;37
de 0cfh,3fh,0c3h,0ch
de 0ffh,0ffh,0ffh,0,0
de 0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0,2
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0
de 0,0ffh,1
de 0,0ffh,0ffh
de 2
;-------------------------------------
de 0,0,0
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;3d
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;40
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;42
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;sms
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0
;********************************************************************
; GSM a38 Silver Wafer card v1.06 by Dejan Kaljevic 1996-2001
;
;********************************************************************
list p=16f876,f=inhx8m,r=dec
__fuses H'3f39'
include dex1.mac
indf equ 0
tmr0 equ 1
pcl equ 2
status equ 3
fsr equ 4
porta equ 5
portb equ 6
portc equ 7
pclath equ 0ah
intcon equ 0bh
ccp2con equ 1dh
adcon0 equ 1fh
option_reg equ 81h
trisa equ 85h
trisb equ 86h
trisc equ 87h
irp equ 7
rp1 equ 6
rp0 equ 5
not_to equ 4
not_pd equ 3
z equ 2
dc equ 1
c equ 0
gie equ 7
peie equ 6
t0ie equ 5
inte equ 4
rbie equ 3
t0if equ 2
intf equ 1
rbif equ 0
port_a equ porta
port_b equ portb
tris_a equ trisa
tris_b equ trisb
pc equ pcl
;*********************************************************
r0 equ 70h
r1 equ 71h
r2 equ 72h
r3 equ 73h
r4 equ 74h
r5 equ 75h
r6 equ 76h
r7 equ 77h
ee_adr equ 78h
ee_adr_l equ 79h
ee_adr_h equ 7ah
ee_data_l equ 7bh
ee_data_h equ 7ch
i2c_count equ 7dh
i2c_reg equ 7eh
iso_fleg equ 20h
rxtx_count equ 21h
tx_reg equ 22h
rx_reg equ 22h
temp_tx equ 23h
wait_reg equ 24h
d1 equ 30h
d2 equ 31h
d3 equ 32h
d4 equ 33h
sel_f1 equ 25h
sel_f2 equ 26h
sel_t1 equ 28h
dir_1 equ 29h
sel_t2 equ 2ah
dir_2 equ 2bh
rec_no equ 2ch
prov_num equ 2dh
resp_fleg equ 2eh
cla equ r0
ins equ r1
p1 equ r2
p2 equ r3
p3 equ r4
i equ 50h
j equ r7
k equ r6
l equ r5
m equ 51h
xm equ 52h
xn equ 53h
t1 equ 54h
t2 equ 55h
temp_k equ 56h
dest_index equ xm
acc equ 57h
sres equ 30h
rnd equ 40h
;************************************************
org 0
;************************************************
start call wait2
clr iso_fleg
movlw 0ffh
movwf port_a
movwf port_b
bank1
movlf adcon0,6 ;for 16f876 port a = digital
movlw 7fh
movwf option_reg
movlw 0ffh
movwf tris_a
movlw 01001111b
movwf tris_b
bank0
;---------------------------------------
call wait1
;-------------------------------------- Send ATR
movlf r7,12h ;size of ATR
movlf ee_adr,atr
call rd_eeprom
xorlw 3fh
jnz no_inv
bsf iso_fleg,0
no_inv: call rd_eeprom
incf ee_adr
call send_byte
djnz r7,no_inv
;================================================
main call wait
movlf r7,5
movlf fsr,cla
call read__data ;get cla,ins,p1,p2,p3
call wait
;------------------------------------------------
cmp cla,0a0h
jnz bad_cla
;================================= CLA A0
movf ins,w
xorlw 0a4h ;cmp ins,0a4h
je select_file
xorlw 84h ;cmp ins,20h
je verify_pin
xorlw 90h ;cmp ins,0b0h
je rd_wr_bin
xorlw 70h ;cmp ins,0c0h
je send_response
xorlw 16h ;cmp ins,0d6h
je rd_wr_bin
xorlw 24h ;cmp ins,0f2h
je _status
xorlw 40h ;cmp ins,0b2h
je rd_wr_record
xorlw 6eh ;cmp ins,0dch
je rd_wr_record
xorlw 54h ;cmp ins,88h
je a38
xorlw 72h ;cmp ins,0fah ;sleep
je ok_end
xorlw 4 ;cmp ins,0feh
je update_ki
jmp bad_ins
;======================================
send_ins call wait
movf ins,w
jmp send_byte
;======================================
; d1=data bafer
; r7=count
;--------------------------------------
read_data movlf fsr,d1
;--------------------------------------
; fsr=addr
; r7=count
;--------------------------------------
read__data call get_byte
movwf 0
incf fsr
djnz r7,read__data
ret
;--------------------------------------
bad_p1p2 movlw 6bh ;6b00h
jmp send_ans0
bad_p3 movlw 67h ;6700h
jmp send_ans0
err_9408 movlf r0,8
jmp send_94
bad_cla movlw 6eh
jmp send_ans0
bad_ins movlw 6dh
jmp send_ans0
ok_end
send_ok movlw 90h
send_ans0 clr r0
send_answer movwf temp_tx
call wait
movf temp_tx,w
call send_byte
movf r0,w
call send_byte
jmp main
;***************************************
; RET w=char
;---------------------------------------
get_byte bank1
bsf tris_b,7 ;in
bank0
l_lev jnb port_b,7,l_lev ;wait for H
h_lev jb port_b,7,h_lev ;wait for L (start impuls)
movlf rxtx_count,9
bcf iso_fleg,1 ;reset parity fleg
jb port_b,7,h_lev ;wait for L
call wait05 ;[372/4/2-9] wait to midle of start impuls
nex_rx_bit btfsc iso_fleg,0 ;1(2)
rlf rx_reg ;1(0)
btfss iso_fleg,0 ;2(1)
rrf rx_reg ;0(1)
call wait1 ;2 [372/4-15]
jnb port_b,7,low_l ;2(3)
;--------------------------
movlw 2 ;1
xorwf iso_fleg ;1 ;parity
nop ;1
stc ;1
low_e djnz rxtx_count,nex_rx_bit ;3
rrf iso_fleg,w
xorwf iso_fleg,w
andlw 1
jnz bad_parity
btfsc iso_fleg,0
comf rx_reg
movf rx_reg,w
ret
low_l clc ;1
jmp low_e ;2
bad_parity call wait1
bank1
bcf tris_b,7 ;out
bank0
bcf port_b,7 ;i/o=0
call wait1
bsf port_b,7 ;i/o=1
bank1
bsf tris_b,7 ;in
call wait05
jmp get_byte
;**************************************
; W = char
send_byte movwf temp_tx
movwf tx_reg
btfsc iso_fleg,0
comf tx_reg
movlf rxtx_count,9
bcf iso_fleg,1 ;reset parity fleg
call wait05
bank1
bsf tris_b,7 ;in
bank0
tx_l jnb port_b,7,tx_l
clc
;---------------
nex_tx_bit jc tx_high ;2(3)
call tx_lo ;2+7
jmp tx_e ;2
tx_high call tx_hi ;2+5
movlw 2 ;1
xorwf iso_fleg ;1 ;parity
nop ;1
tx_e call wait11 ;2 + (372/4-22)
btfsc iso_fleg,0 ;1(2)
rlf tx_reg ;1(0)
btfss iso_fleg,0 ;2(1)
rrf tx_reg ;0(1)
djnz rxtx_count,nex_tx_bit ;3
;---------------
rrf iso_fleg,w ;send parity
xorwf iso_fleg,w
andlw 1
jnz par_s
call tx_lo
jmp end_par
par_s call tx_hi
end_par call wait1
;---------------
call tx_hi ;stop impuls
call wait1
jnb port_b,7,error_tx
call wait2
ret
error_tx call wait2
movf temp_tx,w
jmp send_byte ;try again
;--------------------------------------- out = L
tx_lo bcf port_b,7 ;1 out=0
bank1 ;1
bcf tris_b,7 ;1 ;out
bank0 ;1
bcf port_b,7 ;1 ;out=0
ret ;2
;---------------------------------------
tx_hi bank1 ;1
bsf tris_b,7 ;1 ;in (i/o=1)
bank0 ;1
ret ;2
;---------------------------------------
wait05 ;37 ins
movlf wait_reg,10
jmp _wait3
wait11 ;71 ins
movlf wait_reg,22
jmp _wait1
wait1 ;78 ins
movlf wait_reg,24
nop
_wait3 nop
_wait2 nop
_wait1 djnz wait_reg,_wait1 ;3*wait_reg+1
ret
wait
wait2 ;182 ins
movlf wait_reg,59
jmp _wait1
sda equ 4
scl equ 5
;------------------------------------- 8 ins
start_i2c bsf port_b,scl ;scl=1
bsf port_b,sda ;sda=1
nop
bcf port_b,sda ;sda=0
nop
bcf port_b,scl ;scl=0
ret
;------------------------------------- 9 ins
bit_out btfss status,c ;1(2)
bcf port_b,sda ;1(0)
btfsc status,c ;2(1)
bsf port_b,sda ;0(1)
bsf port_b,scl
nop
bcf port_b,scl
ret
;------------------------------------- 10 ins
bit_in bank1
bsf tris_b,sda
bank0
bsf port_b,scl
clc
btfsc port_b,sda
stc
bcf port_b,scl
ret
;------------------------------------- 138 ins
tx_i2c movlf i2c_count,8 ;2
tx_i2 rlf i2c_reg ;1 ;15*8-1
call bit_out ;11
djnz i2c_count,tx_i2 ;3(2)
call bit_in ;12
sda_out bank1 ;1
bcf tris_b,sda ;1
bank0 ;1
ret ;2
;------------------------------------- 136 ins
rx_i2c movlf i2c_count,8 ;2
rx_i2 call bit_in ;12 ;16*8-1
rlf i2c_reg ;1
djnz i2c_count,rx_i2 ;3(2)
jmp sda_out ;2
;--------------------------------------
rd_i2c_wr_addr: call start_i2c
movlf i2c_reg,0a0h
call tx_i2c
movff i2c_reg,ee_adr_h
call tx_i2c
movff i2c_reg,ee_adr_l
call tx_i2c
bcf port_b,sda
call stop_i2c
call start_i2c
movlf i2c_reg,0a1h
call tx_i2c
ret
rd_i2c_last: call rx_i2c
stc
call bit_out
call stop_i2c
movf i2c_reg,w
ret
;--------------------------------------
stop_i2c bcf port_b,sda ;sda=0
nop
bsf port_b,scl ;scl=1
nop
bsf port_b,sda ;sda=1
ret
;**************************************
wr_i2c: movwf r0
call start_i2c
movlf i2c_reg,0a0h
call tx_i2c
movff i2c_reg,ee_adr_h
call tx_i2c
movff i2c_reg,ee_adr_l
call tx_i2c
movff i2c_reg,r0
call tx_i2c
bcf port_b,sda
;call time
call stop_i2c
nex_pprr: call start_i2c
movlf i2c_reg,0a0h
call tx_i2c
call stop_i2c
jc nex_pprr
ret
;************************************************
select_file movf p1,w
iorwf p2,w
jnz bad_p1p2
cmp p3,2
jnz bad_p3
call send_ins ;OK p1=0,p2=0,p3=2
movlf r7,2
call read_data ;get File ID
;---------------------------------------
cmp d1,3fh
jnz no_mf
movf d2
jnz no_mf ;selected MF
ok_df movlf r0,16h
movff dir_1,d1
movff dir_2,d2
;======================================
send_9fa movff sel_f1,d1
movff sel_f2,d2
clrf rec_no
incf rec_no
bcf resp_fleg,0
;===============
send_9f movlw 9fh
jmp send_answer
;--------------------------------------
no_mf cmp d1,7fh
jnz no_df
cmp d2,10h
jz ok_df ;select DF
cmp d2,20h
jz ok_df
cmp d2,21h
jz ok_df
;--------------------------------------
no_df cmp d1,6fh
jz _ef
cmp d1,2fh
jnz err_9404
cmp d2,0e2h
jnz err_9404
_ef movf d2,w
call test_file
jz err_9404
ok_eef movlf r0,0fh
jmp send_9fa ;select EF (6fxx) or (2fxx)
;=======================================
err_9404 movlf r0,4
send_94 movlw 94h
jmp send_answer
;************************************************
;w=file to test (low byte)
;
;RET z=1 file not found
; z=0 OK r0=index to selected file data
; w=file type
;------------------------------------------------
test_file movwf r0
movlf ee_adr,ef_info
movlf ee_adr_h,0
movlf ee_adr_l,file_data
;---------------
test_file_ call rd_eeprom
andlw 0ffh
jz end_tf ;file is not found in table
xorwf r0,w
jz end_tsf ;file is found
;---------------
incf ee_adr
call rd_eeprom
incf ee_adr
addlw 1 ;get file data addr.
movwf r5
call get_data7 ;file size h
addlw 1
je test_file_ ;skip for IMSI & Kc
incf r5,w
call get_data7 ;file size l
addwf ee_adr_l
btfsc status,c
incf ee_adr_h
movf r5,w
call get_data7 ;file size h
addwf ee_adr_h
jmp test_file_
;--------------------------------------
end_tsf: incf ee_adr
call rd_eeprom ;addr of selected file info
movwf r0
call get_data7
bcf status,z
end_tf ret
;--------------------------------------
;************************************************
_status: movff sel_t1,dir_1
movff sel_t2,dir_2
jmp s_res
;************************************************
send_response: movff sel_t1,sel_f1
movff sel_t2,sel_f2
s_res: call send_ins ;always OK
jb resp_fleg,0,resp_ram ;a38 response
;---------------
cmp sel_t1,3fh
jne no__mf
movlf r0,mf_d
jmp send_resp ;MF
no__mf cmp sel_t1,7fh
jne no__df
movlf r0,df_d
jmp send_resp ;DF
no__df cmp sel_f1,6fh
je resp_ef ;EF (6fxx)
cmp sel_f1,2fh
je resp_ef ;EF (2fxx)
;---------------
send_zeros clrw
call send_byte
djnz p3,send_zeros
jmp ok_end
;--------------------------------------
resp_ram: movlf fsr,sres
rsp_ram: movf 0,w
call send_byte
incf fsr
djnz p3,rsp_ram
jmp ok_end
;************************************************
send_resp movwf r5
clr r7
nex_srr cmp r7,5
jnz no_inf
movf sel_t2,w
jmp noo_inf
no_inf movf r5,w
call get_data7
noo_inf call send_byte
incf r7
incf r5
djnz p3,nex_srr
jmp ok_end
;---------------------------------------
;************************************************
resp_ef movf sel_f2,w
call test_file ;R0 - point to file response data
movwf r6
incf r0
;----------------------------
movlw 85h
call send_byte
movlw 0dh
call send_byte ;send 85 0d
;---------------
movf r0,w
call get_data7
addlw 1
movlw 2
jnz no_ef_t1 ;no IMSI & Kc
clrw
call send_byte
incf r0
movlw 1
no_ef_t1: movwf r7
call send_r0 ;send file size
;---------------
movf sel_f1,w
call send_byte
movf sel_f2,w
call send_byte ;send file ID
;---------------
cmp r6,4
jz _ef_t1
movlf r7,9
call send_r0
jmp ok_end
;----------------------------
_ef_t1: movlw 4
call send_byte
movlw 0
call send_byte ;send 04 00
movlf r7,1
call send_r0
movlf r7,6
movlf r0,ef_d
call send_r0
jmp ok_end
;--------------------------------------
;**************************************
; r0=index in table3
; r7=count
;--------------------------------------
send_r0 movf r0,w
call get_data7
call send_byte
incf r0
djnz r7,send_r0
ret
;--------------------------------------
block_file: movf prov_num,w
addwf prov_num,w
movwf r6
rlf r6
rlf r6,w
addwf prov_num,w ;w=prov_num * 9
addwf ee_adr_l
btfsc status,c
incf ee_adr_h
ret
;************************************************
rd_wr_bin movf sel_f2,w
call test_file
jz err_9408
xorlw 4
jnz err_9408 ;Not selected transparent file
;---------------
cmp sel_f2,7h ;IMSI file
jnz no_imsi
clrf ee_adr_h
movlf ee_adr_l,_imsi
call block_file ;select appropriate IMSI
jmp no_kc
;---------------
no_imsi: cmp sel_f2,20h ;Kc file
jnz no_kc
clrf ee_adr_h
movlf ee_adr_l,_kc
call block_file ;select appropriate Kc
;---------------
no_kc: movf p2,w
addwf ee_adr_l
btfsc status,c
incf ee_adr_h
cmp ins,0d6h
jz write_file
jmp read_file
;************************************************
rd_wr_record: movf sel_f2,w
call test_file
jz err_9408
xorlw 4
jz err_9408 ;transparent file selected
cmp sel_f2,3ah
jne no_3a
movlf ee_adr_h,8
clrf ee_adr_l
no_3a:
;--------------------------------------
decf p2 ;mode
decf p2
je inc_rec_no
decf p2
je dec_rec_no
djnz p2,err_9408
movf p1,w
btfss status,z
movwf rec_no
jmp ok_rcc
dec_rec_n decf rec_no
jmp ok_rcc
inc_rec_n incf rec_no
;---------------
ok_rcc: movf rec_no,w
movwf r6
movlw 0bh
addwf r0,w
call get_data7
jmp nex_rd_r1
nex_aad: addwf ee_adr_l
btfsc status,c
incf ee_adr_h
nex_rd_r1: djnz r6,nex_aad
cmp sel_f2,3ah
je fl_3a
cmp ins,0dch
je write_file
;======================================
read_file: call send_ins
call rd_i2c_wr_addr
nex_rd_r: decf p3,w
jz last_rd
decf p3
call rx_i2c
clc
call bit_out
movf i2c_reg,w
call send_byte
jmp nex_rd_r
last_rd: call rd_i2c_last
call send_byte
jmp ok_end
fl_3a: cmp ins,0dch
je write_file_fl
read_file_fl: call send_ins
rd_fl1: call rd_flash
movf ee_data_l,w
call send_byte
incf ee_adr_l
btfsc status,z
incf ee_adr_h
djnz p3,rd_fl1
jmp ok_end
write_file_fl: comf ins,w
call send_byte
call get_byte
movwf ee_data_l
clrf ee_data_h
call wr_flash
incf ee_adr_l
btfsc status,z
incf ee_adr_h
djnz p3,write_file_fl
jmp ok_end
;======================================
update_ki: cmp p1,'D'
jnz bad_p1p2
cmp p2,'K'
jnz bad_p1p2
cmp p3,16
jnz bad_p3
swapf prov_num,w
andlw 70h
addlw _ki
movwf ee_adr
write_ki: comf ins,w
call send_byte
call get_byte
call wr_eeprom
incf ee_adr
djnz p3,write_ki
jmp ok_end
;======================================
write_file: comf ins,w
call send_byte
call get_byte
call wr_i2c
incf ee_adr_l
btfsc status,z
incf ee_adr_h
djnz p3,write_file
jmp ok_end
;**************************************
verify_pin cmp p3,8
jne bad_p3
call send_ins
movlf r7,8
call read_data
;-------------------------------------
movlw 0fh
andwf d1
andwf d2
andwf d3
andwf d4
swapf d1,w
iorwf d2
swapf d3,w
iorwf d4,w ;d2:d4=PIN
addlw 0ffh
andlw 7
movwf prov_num ;Select provider from 4'th pin digit
jmp ok_end
eedata equ 10ch
eeadr equ 10dh
eedath equ 10eh
eeadrh equ 10fh
eecon1 equ 18ch
eecon2 equ 18dh
rd equ 0
wr equ 1
wren equ 2
wrerr equ 3
eepgd equ 7
;ee_adr
rd_eeprom: bsf status,rp1
bcf status,rp0
movff eeadr,ee_adr
bsf status,rp0
bcf eecon1,eepgd
bsf eecon1,rd
bcf status,rp0
movf eedata,w
bcf status,rp1
ret
;ee_adr
wr_eeprom: bsf status,rp1
bcf status,rp0
movwf eedata
movff eeadr,ee_adr
bsf status,rp0
bcf eecon1,eepgd
bsf eecon1,wren
;bcf intcon,gie
movlw 55h
movwf eecon2
movlw 0aah
movwf eecon2
bsf eecon1,wr
w_wr: jb eecon1,wr,w_wr
;bsf intcon,gie
;sleep
bcf eecon1,wren
;bcf intcon,gie
bank_0: bcf status,rp1
bcf status,rp0
ret
rd_flash: bsf status,rp1
bcf status,rp0
movff eeadr,ee_adr_l
movff eeadrh,ee_adr_h
bsf status,rp0
bsf eecon1,eepgd
bsf eecon1,rd
nop
nop
bcf status,rp0
movff ee_data_h,eedath
movff ee_data_l,eedata
jmp bank_0
wr_flash: bsf status,rp1
bcf status,rp0
movff eeadr,ee_adr_l
movff eeadrh,ee_adr_h
movff eedata,ee_data_l
movff eedath,ee_data_h
bsf status,rp0
bsf eecon1,eepgd
bsf eecon1,wren
bcf intcon,gie
movlw 55h
movwf eecon2
movlw 0aah
movwf eecon2
bsf eecon1,wr
nop
nop
bcf eecon1,wren
jmp bank_0
;**************************************
; MoU A38 chiphering algorithm
;--------------------------------------
a38:
;movf p1,w
;iorwf p2,w
;jnz bad_p1p2
cmp p3,16
jnz bad_p3
bsf resp_fleg,0
call send_ins ;OK p1=0,p2=0,p3=16
movff r7,p3
movlf fsr,40h
call read__data ;get RND
;================================================
movlf i,7
next_i
;****************************************
; Copy Ki
;----------------------------------------
movlf fsr,sres
movlf r7,16
swapf prov_num,w
andlw 70h
addlw _ki
movwf ee_adr
nex_mov_ki call rd_eeprom
movwf 0
incf ee_adr
incf fsr
djnz r7,nex_mov_ki
;**************************************
movlf j,4
movlf t2,1
movlf t1,16
;--------------------------------------
next_j clrf temp_k
decf t2,w
movwf k ;k=t2-1
;--------------------------------------
next_k decf t1,w
movwf l ;l=t1-1
;--------------------------------------
next_l movf l,w
addwf temp_k,w
movwf m
;-------------------------------
addlw sres
movwf fsr ;fsr=sres+M
movff xm,0 ;XM=[sres+M]
movf t1,w ;N=M+T1
addwf fsr ;fsr=sres+N
movff xn,0 ;XN=[sres+N]
movf xm,w
call add_wx ;w = [((w+xm+xn) AND (2^9-J)-1) + table [J]]
movwf 0 ;[sres+N]=w
movf t1,w
subwf fsr ;fsr=sres+M
movf xn,w
call add_wx ;w = [((w+xm+xn) AND (2^9-J)-1) + table [J]]
movwf 0 ;[sres+M]=w
;-------------------------------
decf l
jnb l,7, next_l
;===============================
clc
rlf t1,w ;w=t1*2
addwf temp_k ;temp_k=temp_k+t1*2
decf k
jnb k,7, next_k
;===============================
clc
rlf t2 ;t2=t2*2
rrf t1 ;t1=t1/2
decf j
jnb j,7, next_j
;===============================
;--------------------------------------
movlf fsr,sres
movlf r5,2
movlf r7,16
nex_mov1 swapf 0,w
incf fsr
iorwf 0,w
movwf r6
incf fsr
movf r5,w
subwf fsr
movff 0,r6
movf r5,w
addwf fsr
incf r5
djnz r7,nex_mov1
;--------------------------------------
movf i
jz end_a38
;---------------
movlf j,16
movlf dest_index,sres+16
clrf l
nex_bit1 movlf t2,80h
movlf k,8
clrf m
nex_bit2 rlf l,w
movwf t1
swapf t1
movlw 0fh
andwf t1 ;t1=l/8
movlw sres
addwf t1,w
movwf fsr ;fsr=sres+l/8 and 15
movf 0,w
andwf t2,w
iorwf m
clc
rrf t2 ;shr t2
movlw 17
addwf l
djnz k,nex_bit2
movff fsr,dest_index
movff 0,m
incf dest_index
djnz j,nex_bit1
;--------------------------------------
decf i
jmp next_i
;======================================
end_a38 movlf r6,2
nex_rt1 movlf fsr,sres+15
movlf r7,7
clc
nex_rt2 rlf 0
decf fsr
djnz r7,nex_rt2
djnz r6,nex_rt1
;--------------------------------------
movlf r7,7
movlf fsr,sres+9
nex_rt3 movff r6,0
movlw 5
subwf fsr
movff 0,r6
movlw 6
addwf fsr
djnz r7,nex_rt3
clrf sres+11
clrf pclath
movlf r0,0ch
jmp send_9f
org 400h
dt 102,177,186,162, 2,156,112, 75, 55, 25, 8, 12,251,193,246,188
dt 109,213,151, 53, 42, 79,191,115,233,242,164,223,209,148,108,161
dt 252, 37,244, 47, 64,211, 6,237,185,160,139,113, 76,138, 59, 70
dt 67, 26, 13,157, 63,179,221, 30,214, 36,166, 69,152,124,207,116
dt 247,194, 41, 84, 71, 1, 49, 14, 95, 35,169, 21, 96, 78,215,225
dt 182,243, 28, 92,201,118, 4, 74,248,128, 17, 11,146,132,245, 48
dt 149, 90,120, 39, 87,230,106,232,175, 19,126,190,202,141,137,176
dt 250, 27,101, 40,219,227, 58, 20, 51,178, 98,216,140, 22, 32,121
dt 61,103,203, 72, 29,110, 85,212,180,204,150,183, 15, 66,172,196
dt 56,197,158, 0,100, 45,153, 7,144,222,163,167, 60,135,210,231
dt 174,165, 38,249,224, 34,220,229,217,208,241, 68,206,189,125,255
dt 239, 54,168, 89,123,122, 73,145,117,234,143, 99,129,200,192, 82
dt 104,170,136,235, 93, 81,205,173,236, 94,105, 52, 46,228,198, 5
dt 57,254, 97,155,142,133,199,171,187, 50, 65,181,127,107,147,226
dt 184,218,131, 33, 77, 86, 31, 44, 88, 62,238, 18, 24, 43,154, 23
dt 80,159,134,111, 9,114, 3, 91, 16,130, 83, 10,195,240,253,119
org 500h
dt 19, 11, 80,114, 43, 1, 69, 94, 39, 18,127,117, 97, 3, 85, 43
dt 27,124, 70, 83, 47, 71, 63, 10, 47, 89, 79, 4, 14, 59, 11, 5
dt 35,107,103, 68, 21, 86, 36, 91, 85,126, 32, 50,109, 94,120, 6
dt 53, 79, 28, 45, 99, 95, 41, 34, 88, 68, 93, 55,110,125,105, 20
dt 90, 80, 76, 96, 23, 60, 89, 64,121, 56, 14, 74,101, 8, 19, 78
dt 76, 66,104, 46,111, 50, 32, 3, 39, 0, 58, 25, 92, 22, 18, 51
dt 57, 65,119,116, 22,109, 7, 86, 59, 93, 62,110, 78, 99, 77, 67
dt 12,113, 87, 98,102, 5, 88, 33, 38, 56, 23, 8, 75, 45, 13, 75
dt 95, 63, 28, 49,123,120, 20,112, 44, 30, 15, 98,106, 2,103, 29
dt 82,107, 42,124, 24, 30, 41, 16,108,100,117, 40, 73, 40, 7,114
dt 82,115, 36,112, 12,102,100, 84, 92, 48, 72, 97, 9, 54, 55, 74
dt 113,123, 17, 26, 53, 58, 4, 9, 69,122, 21,118, 42, 60, 27, 73
dt 118,125, 34, 15, 65,115, 84, 64, 62, 81, 70, 1, 24,111,121, 83
dt 104, 81, 49,127, 48,105, 31, 10, 6, 91, 87, 37, 16, 54,116,126
dt 31, 38, 13, 0, 72,106, 77, 61, 26, 67, 46, 29, 96, 37, 61, 52
dt 101, 17, 44,108, 71, 52, 66, 57, 33, 51, 25, 90, 2,119,122, 35
org 600h
dt 52, 50, 44, 6, 21, 49, 41, 59, 39, 51, 25, 32, 51, 47, 52, 43
dt 37, 4, 40, 34, 61, 12, 28, 4, 58, 23, 8, 15, 12, 22, 9, 18
dt 55, 10, 33, 35, 50, 1, 43, 3, 57, 13, 62, 14, 7, 42, 44, 59
dt 62, 57, 27, 6, 8, 31, 26, 54, 41, 22, 45, 20, 39, 3, 16, 56
dt 48, 2, 21, 28, 36, 42, 60, 33, 34, 18, 0, 11, 24, 10, 17, 61
dt 29, 14, 45, 26, 55, 46, 11, 17, 54, 46, 9, 24, 30, 60, 32, 0
dt 20, 38, 2, 30, 58, 35, 1, 16, 56, 40, 23, 48, 13, 19, 19, 27
dt 31, 53, 47, 38, 63, 15, 49, 5, 37, 53, 25, 36, 63, 29, 5, 7
dt 1, 5, 29, 6, 25, 1, 18, 23, 17, 19, 0, 9, 24, 25, 6, 31
dt 28, 20, 24, 30, 4, 27, 3, 13, 15, 16, 14, 18, 4, 3, 8, 9
dt 20, 0, 12, 26, 21, 8, 28, 2, 29, 2, 15, 7, 11, 22, 14, 10
dt 17, 21, 12, 30, 26, 27, 16, 31, 11, 7, 13, 23, 10, 5, 22, 19
;org 700h
;======================================
_j1 ;bcf pclath,0 ;table1 page4
bcf pclath,1
movf acc,w
clrf acc
addwf xn,w ;w=w+XN
btfsc status,c
incf acc
addwf xm,w ;w=w+XN+XM
btfsc status,c
incf acc
bcf acc,1
xorwf acc,w
movwf pc
;-----------------------
add_wx movwf acc
movlf pclath,6 ;page 6
movf J,w
call pc_table
movwf pc ;jmp [pc_table+J] page7
;-----------------------
;-----------------------
pc_table addwf pc
dt j5,j4,j3,j2,_j1
;-----------------------
;-----------------------
w_add movf acc,w
addwf xn,w ;w=acc+XN
addwf xm,w ;w=acc+XN+XM
ret
;-----------------------
j2 bcf pclath,1 ;table2 page 5
bsf pclath,0
call w_add ;j=2
movwf pc
;-----------------------
j3 ;bcf pclath,0 ;table3 page 6
call w_add ;j=3
andlw 7fh
movwf pc
;-----------------------
j4 ;bcf pclath,0 ;table4 page 6
call w_add ;j=4
andlw 3fh
addlw 80h
movwf pc
;-----------------------
j5 call w_add ;table5
;j=5
movwf ee_adr_l
rrf ee_adr_l,w
andlw 0fh
addlw _table_5
call get_data7
movwf ee_adr_h
btfsc ee_adr_l,0
swapf ee_adr_h
swapf ee_adr_h,w
andlw 0fh
ret
;-------------------------------------------------------------
org 700h
get_data7 bsf pclath,0
bsf pclath,1
bsf pclath,2
movwf pc
_table_5 dt 0fch,0a4h,1eh,0b7h,50h,0e7h,12h,0d8h
dt 0a3h,49h,60h,32h,56h,89h,0bdh,0fch
mf_d dt 85h,14h,1,0f0h,3fh,0,1,80h,0,0ffh,0ffh,43h,9,9,2,5
dt 4,0,83h,8ah,83h,8ah
df_d dt 85h,14h,0,30h,7fh,10h,2,80h,0,0fbh,0ffh,3,9,9,0,14
dt 4,0,83h,8ah,83h,8ah
ef_d dt 0ffh,0bbh,3,2,0,0
_5 dt 4, 0,4, 1
_7 dt 4, 0ffh,9, 1bh
_20 dt 4, 0ffh,9, 11h
_30 dt 4, 0,2dh, 11h
_31 dt 4, 0,1, 1bh
_37 dt 4, 0,3, 12h
_38 dt 4, 0,4, 1bh
_41 dt 4, 0,5, 1bh
_43 dt 4, 0,2, 11h
_45 dt 4, 0,0ah, 12h
_74 dt 4, 0,10h, 11h
_78 dt 4, 0,2, 1bh
_7b dt 4, 0,0ch, 11h
_7e dt 4, 0,0bh, 11h
_ad dt 4, 0,3, 0bh
_ae dt 4, 0,1, 0bh
_e2 dt 4, 0,0ah, 0fh
_3a dt 14h, 17h,0f4h, 04, 00, 11h, 0FBh, 22h, 03, 02, 01, 1Ch
_3c dt 14h, 1ch,0e0h, 04, 00, 11h, 0FBh, 0BBh, 03, 02, 01, 0B0h
_3d dt 14h, 0,38h, 04, 00, 11h, 0FBh, 0BBh, 03, 02, 01, 0Eh
_40 dt 14h, 0,70h, 04, 00, 11h, 0fbh, 0bbh, 03, 02, 01, 1ch
_42 dt 14h, 1,40h, 04, 00, 11h, 0fbh, 0bbh, 03, 02, 01, 28h
_39 dt 34h, 0,3, 04, 40h, 12h, 1Bh, 0BBh, 83h, 02, 03, 03
org 2100h
_ki de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
atr de 3fh,2fh,0,80h,69h,0afh,2,4,1,31h,0,0,0,0eh,83h,3eh,9fh,16h
ef_info de 7,_7,0e2h,_e2, 5,_5,20h,_20,30h,_30,31h,_31,37h,_37
de 38h,_38,41h,_41,43h,_43,45h,_45,74h,_74,78h,_78
de 7bh,_7b,7eh,_7e,0adh,_ad,0aeh,_ae
de 39h,_39,3dh,_3d,40h,_40,42h,_42,3ch,_3c,3ah,_3a
de 0
org 4000h
_imsi de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
_kc de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
file_data de 98h,83h,11h,11h,11h,11h,11h,11h,11h,0f1h ;e2
de 1,0ffh,0ffh,0ffh ;05
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;30
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh ;31
de 0,0,0 ;37
de 0cfh,3fh,0c3h,0ch
de 0ffh,0ffh,0ffh,0,0
de 0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0,2
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0
de 0,0ffh,1
de 0,0ffh,0ffh
de 2
;-------------------------------------
de 0,0,0
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;3d
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;40
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;42
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh ;sms
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
de 0