OpenCores
URL https://opencores.org/ocsvn/lxp32/lxp32/trunk

Subversion Repositories lxp32

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /lxp32/trunk/verify/lxp32/src
    from Rev 6 to Rev 9
    Reverse comparison

Rev 6 → Rev 9

/firmware/test001.asm
1,482 → 1,482
/*
* This test verifies that basic instructions
* (data transfers, addition/subtraction, jumps) work.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, bad_jump
lc r103, reg_is_nonzero
// Check that all registers are zero-initialized after reset
// Ignore r100-r103 which are already used
cjmpne r103, r0, 0
cjmpne r103, r1, 0
cjmpne r103, r2, 0
cjmpne r103, r3, 0
cjmpne r103, r4, 0
cjmpne r103, r5, 0
cjmpne r103, r6, 0
cjmpne r103, r7, 0
cjmpne r103, r8, 0
cjmpne r103, r9, 0
cjmpne r103, r10, 0
cjmpne r103, r11, 0
cjmpne r103, r12, 0
cjmpne r103, r13, 0
cjmpne r103, r14, 0
cjmpne r103, r15, 0
cjmpne r103, r16, 0
cjmpne r103, r17, 0
cjmpne r103, r18, 0
cjmpne r103, r19, 0
cjmpne r103, r20, 0
cjmpne r103, r21, 0
cjmpne r103, r22, 0
cjmpne r103, r23, 0
cjmpne r103, r24, 0
cjmpne r103, r25, 0
cjmpne r103, r26, 0
cjmpne r103, r27, 0
cjmpne r103, r28, 0
cjmpne r103, r29, 0
cjmpne r103, r30, 0
cjmpne r103, r31, 0
cjmpne r103, r32, 0
cjmpne r103, r33, 0
cjmpne r103, r34, 0
cjmpne r103, r35, 0
cjmpne r103, r36, 0
cjmpne r103, r37, 0
cjmpne r103, r38, 0
cjmpne r103, r39, 0
cjmpne r103, r40, 0
cjmpne r103, r41, 0
cjmpne r103, r42, 0
cjmpne r103, r43, 0
cjmpne r103, r44, 0
cjmpne r103, r45, 0
cjmpne r103, r46, 0
cjmpne r103, r47, 0
cjmpne r103, r48, 0
cjmpne r103, r49, 0
cjmpne r103, r50, 0
cjmpne r103, r51, 0
cjmpne r103, r52, 0
cjmpne r103, r53, 0
cjmpne r103, r54, 0
cjmpne r103, r55, 0
cjmpne r103, r56, 0
cjmpne r103, r57, 0
cjmpne r103, r58, 0
cjmpne r103, r59, 0
cjmpne r103, r60, 0
cjmpne r103, r61, 0
cjmpne r103, r62, 0
cjmpne r103, r63, 0
cjmpne r103, r64, 0
cjmpne r103, r65, 0
cjmpne r103, r66, 0
cjmpne r103, r67, 0
cjmpne r103, r68, 0
cjmpne r103, r69, 0
cjmpne r103, r70, 0
cjmpne r103, r71, 0
cjmpne r103, r72, 0
cjmpne r103, r73, 0
cjmpne r103, r74, 0
cjmpne r103, r75, 0
cjmpne r103, r76, 0
cjmpne r103, r77, 0
cjmpne r103, r78, 0
cjmpne r103, r79, 0
cjmpne r103, r80, 0
cjmpne r103, r81, 0
cjmpne r103, r82, 0
cjmpne r103, r83, 0
cjmpne r103, r84, 0
cjmpne r103, r85, 0
cjmpne r103, r86, 0
cjmpne r103, r87, 0
cjmpne r103, r88, 0
cjmpne r103, r89, 0
cjmpne r103, r90, 0
cjmpne r103, r91, 0
cjmpne r103, r92, 0
cjmpne r103, r93, 0
cjmpne r103, r94, 0
cjmpne r103, r95, 0
cjmpne r103, r96, 0
cjmpne r103, r97, 0
cjmpne r103, r98, 0
cjmpne r103, r99, 0
cjmpne r103, r104, 0
cjmpne r103, r105, 0
cjmpne r103, r106, 0
cjmpne r103, r107, 0
cjmpne r103, r108, 0
cjmpne r103, r109, 0
cjmpne r103, r110, 0
cjmpne r103, r111, 0
cjmpne r103, r112, 0
cjmpne r103, r113, 0
cjmpne r103, r114, 0
cjmpne r103, r115, 0
cjmpne r103, r116, 0
cjmpne r103, r117, 0
cjmpne r103, r118, 0
cjmpne r103, r119, 0
cjmpne r103, r120, 0
cjmpne r103, r121, 0
cjmpne r103, r122, 0
cjmpne r103, r123, 0
cjmpne r103, r124, 0
cjmpne r103, r125, 0
cjmpne r103, r126, 0
cjmpne r103, r127, 0
cjmpne r103, r128, 0
cjmpne r103, r129, 0
cjmpne r103, r130, 0
cjmpne r103, r131, 0
cjmpne r103, r132, 0
cjmpne r103, r133, 0
cjmpne r103, r134, 0
cjmpne r103, r135, 0
cjmpne r103, r136, 0
cjmpne r103, r137, 0
cjmpne r103, r138, 0
cjmpne r103, r139, 0
cjmpne r103, r140, 0
cjmpne r103, r141, 0
cjmpne r103, r142, 0
cjmpne r103, r143, 0
cjmpne r103, r144, 0
cjmpne r103, r145, 0
cjmpne r103, r146, 0
cjmpne r103, r147, 0
cjmpne r103, r148, 0
cjmpne r103, r149, 0
cjmpne r103, r150, 0
cjmpne r103, r151, 0
cjmpne r103, r152, 0
cjmpne r103, r153, 0
cjmpne r103, r154, 0
cjmpne r103, r155, 0
cjmpne r103, r156, 0
cjmpne r103, r157, 0
cjmpne r103, r158, 0
cjmpne r103, r159, 0
cjmpne r103, r160, 0
cjmpne r103, r161, 0
cjmpne r103, r162, 0
cjmpne r103, r163, 0
cjmpne r103, r164, 0
cjmpne r103, r165, 0
cjmpne r103, r166, 0
cjmpne r103, r167, 0
cjmpne r103, r168, 0
cjmpne r103, r169, 0
cjmpne r103, r170, 0
cjmpne r103, r171, 0
cjmpne r103, r172, 0
cjmpne r103, r173, 0
cjmpne r103, r174, 0
cjmpne r103, r175, 0
cjmpne r103, r176, 0
cjmpne r103, r177, 0
cjmpne r103, r178, 0
cjmpne r103, r179, 0
cjmpne r103, r180, 0
cjmpne r103, r181, 0
cjmpne r103, r182, 0
cjmpne r103, r183, 0
cjmpne r103, r184, 0
cjmpne r103, r185, 0
cjmpne r103, r186, 0
cjmpne r103, r187, 0
cjmpne r103, r188, 0
cjmpne r103, r189, 0
cjmpne r103, r190, 0
cjmpne r103, r191, 0
cjmpne r103, r192, 0
cjmpne r103, r193, 0
cjmpne r103, r194, 0
cjmpne r103, r195, 0
cjmpne r103, r196, 0
cjmpne r103, r197, 0
cjmpne r103, r198, 0
cjmpne r103, r199, 0
cjmpne r103, r200, 0
cjmpne r103, r201, 0
cjmpne r103, r202, 0
cjmpne r103, r203, 0
cjmpne r103, r204, 0
cjmpne r103, r205, 0
cjmpne r103, r206, 0
cjmpne r103, r207, 0
cjmpne r103, r208, 0
cjmpne r103, r209, 0
cjmpne r103, r210, 0
cjmpne r103, r211, 0
cjmpne r103, r212, 0
cjmpne r103, r213, 0
cjmpne r103, r214, 0
cjmpne r103, r215, 0
cjmpne r103, r216, 0
cjmpne r103, r217, 0
cjmpne r103, r218, 0
cjmpne r103, r219, 0
cjmpne r103, r220, 0
cjmpne r103, r221, 0
cjmpne r103, r222, 0
cjmpne r103, r223, 0
cjmpne r103, r224, 0
cjmpne r103, r225, 0
cjmpne r103, r226, 0
cjmpne r103, r227, 0
cjmpne r103, r228, 0
cjmpne r103, r229, 0
cjmpne r103, r230, 0
cjmpne r103, r231, 0
cjmpne r103, r232, 0
cjmpne r103, r233, 0
cjmpne r103, r234, 0
cjmpne r103, r235, 0
cjmpne r103, r236, 0
cjmpne r103, r237, 0
cjmpne r103, r238, 0
cjmpne r103, r239, 0
cjmpne r103, r240, 0
cjmpne r103, r241, 0
cjmpne r103, r242, 0
cjmpne r103, r243, 0
cjmpne r103, r244, 0
cjmpne r103, r245, 0
cjmpne r103, r246, 0
cjmpne r103, r247, 0
cjmpne r103, r248, 0
cjmpne r103, r249, 0
cjmpne r103, r250, 0
cjmpne r103, r251, 0
cjmpne r103, r252, 0
cjmpne r103, r253, 0
cjmpne r103, r254, 0
cjmpne r103, r255, 0
lc r0, jump0
jmp r0
reg_is_nonzero:
sw r100, 2 // failure: register is not initialized
jmp r101
// Test different jump conditions
jump0:
lc r0, jump1
jmp r0
sw r100, 3 // failure: this instruction should not be reachable
jmp r101
jump1:
lc r0, jump2
mov r1, 100
cjmpne r0, r1, 101
sw r100, 4 // failure: required jump is not taken
jmp r101
jump2:
lc r0, jump3
cjmpe r0, r1, 100
sw r100, 5 // failure: required jump is not taken
jmp r101
jump3:
lc r0, jump4
cjmpuge r0, r1, 99
sw r100, 6 // failure: required jump is not taken
jmp r101
jump4:
lc r0, jump5
cjmpuge r0, r1, 100
sw r100, 7 // failure: required jump is not taken
jmp r101
jump5:
lc r0, jump6
cjmpug r0, r1, 99
sw r100, 8 // failure: required jump is not taken
jmp r101
jump6:
lc r0, jump7
cjmpsge r0, r1, -128
sw r100, 9 // failure: required jump is not taken
jmp r101
jump7:
lc r0, jump8
cjmpsge r0, r1, 100
sw r100, 10 // failure: required jump is not taken
jmp r101
jump8:
lc r0, jump9
cjmpsg r0, r1, 99
sw r100, 11 // failure: required jump is not taken
jmp r101
jump9:
lc r0, 2227053353
lc r1, 2933288161
cjmpug r102, r0, r1
 
lc r0, 3957963761
lc r1, 4048130130
cjmpug r102, r0, r1
 
lc r0, 1021028019
lc r1, 2570980487
cjmpug r102, r0, r1
 
lc r0, 470638116
lc r1, 3729241862
cjmpug r102, r0, r1
 
lc r0, 2794175299
lc r1, 3360494259
cjmpug r102, r0, r1
 
lc r0, 522532873
lc r1, 2103051039
cjmpug r102, r0, r1
 
lc r0, 994440598
lc r1, 4241216605
cjmpug r102, r0, r1
 
lc r0, 176753939
lc r1, 850320156
cjmpug r102, r0, r1
 
lc r0, 3998259744
lc r1, 4248205376
cjmpug r102, r0, r1
 
lc r0, 3695803806
lc r1, 4130490642
cjmpug r102, r0, r1
 
lc r0, -798605244
lc r1, -233549907
cjmpsg r102, r0, r1
 
lc r0, -1221540757
lc r1, 580991794
cjmpsg r102, r0, r1
 
lc r0, -1651432714
lc r1, -635466783
cjmpsg r102, r0, r1
 
lc r0, 43633328
lc r1, 1235055289
cjmpsg r102, r0, r1
 
lc r0, -2132159079
lc r1, -981565396
cjmpsg r102, r0, r1
 
lc r0, -859182414
lc r1, -697843885
cjmpsg r102, r0, r1
 
lc r0, 1720638509
lc r1, 2127959231
cjmpsg r102, r0, r1
 
lc r0, -1888878751
lc r1, 1230499715
cjmpsg r102, r0, r1
 
lc r0, 517066081
lc r1, 1914084509
cjmpsg r102, r0, r1
 
lc r0, -266475918
lc r1, 2001358724
cjmpsg r102, r0, r1
 
mov r1, 100
cjmpe r102, r1, 101
cjmpne r102, r1, 100
cjmpuge r102, r1, 101
cjmpug r102, r1, 100
cjmpug r102, r1, 101
cjmpsge r102, r1, 101
cjmpsg r102, r1, 101
cjmpsg r102, r1, 100
cjmpsg r102, -128, r1
lc r0, jump10
jmp r0
bad_jump:
sw r100, 12 // failure: jump should not be taken
jmp r101
jump10:
 
// Copy itself to another portion of memory
mov r0, 0 // source pointer
lc r1, 0x00008000 // destination pointer
lc r2, halt@2 // size of block to copy, in bytes
lc r32, copy_loop
copy_loop:
lw r3, r0
sw r1, r3
add r0, r0, 4
add r1, r1, 4
cjmpul r32, r0, r2
 
// Calculate sum of program body in a post-condition loop
mov r0, 0 // pointer
mov r16, 0 // sum
lc r32, sum_loop
sum_loop:
lw r1, r0
add r16, r16, r1
add r0, r0, 4
cjmpul r32, r0, r2
 
// Calculate sum of copied program body with negative sign, in a pre-condition loop
lc r0, 0x00008000 // pointer
add r2, r0, r2 // end pointer
mov r17, 0 // sum
lc r32, sum2_loop
lc r33, sum2_end
sum2_loop:
cjmpuge r33, r0, r2
lw r1, r0
sub r17, r17, r1
add r0, r0, 4
jmp r32
sw r100, 13 // failure: this instruction should not be reachable
jmp r101
 
sum2_end:
 
// Check that sums are equal (but with opposite signs)
add r0, r16, r17 // r0 should be zero now
lc r32, success
cjmpe r32, r0, 0
sw r100, 14 // failure: results do not match
jmp r101
success:
sw r100, 1
halt:
hlt
jmp r101
/*
* This test verifies that basic instructions
* (data transfers, addition/subtraction, jumps) work.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, bad_jump
lc r103, reg_is_nonzero
// Check that all registers are zero-initialized after reset
// Ignore r100-r103 which are already used
cjmpne r103, r0, 0
cjmpne r103, r1, 0
cjmpne r103, r2, 0
cjmpne r103, r3, 0
cjmpne r103, r4, 0
cjmpne r103, r5, 0
cjmpne r103, r6, 0
cjmpne r103, r7, 0
cjmpne r103, r8, 0
cjmpne r103, r9, 0
cjmpne r103, r10, 0
cjmpne r103, r11, 0
cjmpne r103, r12, 0
cjmpne r103, r13, 0
cjmpne r103, r14, 0
cjmpne r103, r15, 0
cjmpne r103, r16, 0
cjmpne r103, r17, 0
cjmpne r103, r18, 0
cjmpne r103, r19, 0
cjmpne r103, r20, 0
cjmpne r103, r21, 0
cjmpne r103, r22, 0
cjmpne r103, r23, 0
cjmpne r103, r24, 0
cjmpne r103, r25, 0
cjmpne r103, r26, 0
cjmpne r103, r27, 0
cjmpne r103, r28, 0
cjmpne r103, r29, 0
cjmpne r103, r30, 0
cjmpne r103, r31, 0
cjmpne r103, r32, 0
cjmpne r103, r33, 0
cjmpne r103, r34, 0
cjmpne r103, r35, 0
cjmpne r103, r36, 0
cjmpne r103, r37, 0
cjmpne r103, r38, 0
cjmpne r103, r39, 0
cjmpne r103, r40, 0
cjmpne r103, r41, 0
cjmpne r103, r42, 0
cjmpne r103, r43, 0
cjmpne r103, r44, 0
cjmpne r103, r45, 0
cjmpne r103, r46, 0
cjmpne r103, r47, 0
cjmpne r103, r48, 0
cjmpne r103, r49, 0
cjmpne r103, r50, 0
cjmpne r103, r51, 0
cjmpne r103, r52, 0
cjmpne r103, r53, 0
cjmpne r103, r54, 0
cjmpne r103, r55, 0
cjmpne r103, r56, 0
cjmpne r103, r57, 0
cjmpne r103, r58, 0
cjmpne r103, r59, 0
cjmpne r103, r60, 0
cjmpne r103, r61, 0
cjmpne r103, r62, 0
cjmpne r103, r63, 0
cjmpne r103, r64, 0
cjmpne r103, r65, 0
cjmpne r103, r66, 0
cjmpne r103, r67, 0
cjmpne r103, r68, 0
cjmpne r103, r69, 0
cjmpne r103, r70, 0
cjmpne r103, r71, 0
cjmpne r103, r72, 0
cjmpne r103, r73, 0
cjmpne r103, r74, 0
cjmpne r103, r75, 0
cjmpne r103, r76, 0
cjmpne r103, r77, 0
cjmpne r103, r78, 0
cjmpne r103, r79, 0
cjmpne r103, r80, 0
cjmpne r103, r81, 0
cjmpne r103, r82, 0
cjmpne r103, r83, 0
cjmpne r103, r84, 0
cjmpne r103, r85, 0
cjmpne r103, r86, 0
cjmpne r103, r87, 0
cjmpne r103, r88, 0
cjmpne r103, r89, 0
cjmpne r103, r90, 0
cjmpne r103, r91, 0
cjmpne r103, r92, 0
cjmpne r103, r93, 0
cjmpne r103, r94, 0
cjmpne r103, r95, 0
cjmpne r103, r96, 0
cjmpne r103, r97, 0
cjmpne r103, r98, 0
cjmpne r103, r99, 0
cjmpne r103, r104, 0
cjmpne r103, r105, 0
cjmpne r103, r106, 0
cjmpne r103, r107, 0
cjmpne r103, r108, 0
cjmpne r103, r109, 0
cjmpne r103, r110, 0
cjmpne r103, r111, 0
cjmpne r103, r112, 0
cjmpne r103, r113, 0
cjmpne r103, r114, 0
cjmpne r103, r115, 0
cjmpne r103, r116, 0
cjmpne r103, r117, 0
cjmpne r103, r118, 0
cjmpne r103, r119, 0
cjmpne r103, r120, 0
cjmpne r103, r121, 0
cjmpne r103, r122, 0
cjmpne r103, r123, 0
cjmpne r103, r124, 0
cjmpne r103, r125, 0
cjmpne r103, r126, 0
cjmpne r103, r127, 0
cjmpne r103, r128, 0
cjmpne r103, r129, 0
cjmpne r103, r130, 0
cjmpne r103, r131, 0
cjmpne r103, r132, 0
cjmpne r103, r133, 0
cjmpne r103, r134, 0
cjmpne r103, r135, 0
cjmpne r103, r136, 0
cjmpne r103, r137, 0
cjmpne r103, r138, 0
cjmpne r103, r139, 0
cjmpne r103, r140, 0
cjmpne r103, r141, 0
cjmpne r103, r142, 0
cjmpne r103, r143, 0
cjmpne r103, r144, 0
cjmpne r103, r145, 0
cjmpne r103, r146, 0
cjmpne r103, r147, 0
cjmpne r103, r148, 0
cjmpne r103, r149, 0
cjmpne r103, r150, 0
cjmpne r103, r151, 0
cjmpne r103, r152, 0
cjmpne r103, r153, 0
cjmpne r103, r154, 0
cjmpne r103, r155, 0
cjmpne r103, r156, 0
cjmpne r103, r157, 0
cjmpne r103, r158, 0
cjmpne r103, r159, 0
cjmpne r103, r160, 0
cjmpne r103, r161, 0
cjmpne r103, r162, 0
cjmpne r103, r163, 0
cjmpne r103, r164, 0
cjmpne r103, r165, 0
cjmpne r103, r166, 0
cjmpne r103, r167, 0
cjmpne r103, r168, 0
cjmpne r103, r169, 0
cjmpne r103, r170, 0
cjmpne r103, r171, 0
cjmpne r103, r172, 0
cjmpne r103, r173, 0
cjmpne r103, r174, 0
cjmpne r103, r175, 0
cjmpne r103, r176, 0
cjmpne r103, r177, 0
cjmpne r103, r178, 0
cjmpne r103, r179, 0
cjmpne r103, r180, 0
cjmpne r103, r181, 0
cjmpne r103, r182, 0
cjmpne r103, r183, 0
cjmpne r103, r184, 0
cjmpne r103, r185, 0
cjmpne r103, r186, 0
cjmpne r103, r187, 0
cjmpne r103, r188, 0
cjmpne r103, r189, 0
cjmpne r103, r190, 0
cjmpne r103, r191, 0
cjmpne r103, r192, 0
cjmpne r103, r193, 0
cjmpne r103, r194, 0
cjmpne r103, r195, 0
cjmpne r103, r196, 0
cjmpne r103, r197, 0
cjmpne r103, r198, 0
cjmpne r103, r199, 0
cjmpne r103, r200, 0
cjmpne r103, r201, 0
cjmpne r103, r202, 0
cjmpne r103, r203, 0
cjmpne r103, r204, 0
cjmpne r103, r205, 0
cjmpne r103, r206, 0
cjmpne r103, r207, 0
cjmpne r103, r208, 0
cjmpne r103, r209, 0
cjmpne r103, r210, 0
cjmpne r103, r211, 0
cjmpne r103, r212, 0
cjmpne r103, r213, 0
cjmpne r103, r214, 0
cjmpne r103, r215, 0
cjmpne r103, r216, 0
cjmpne r103, r217, 0
cjmpne r103, r218, 0
cjmpne r103, r219, 0
cjmpne r103, r220, 0
cjmpne r103, r221, 0
cjmpne r103, r222, 0
cjmpne r103, r223, 0
cjmpne r103, r224, 0
cjmpne r103, r225, 0
cjmpne r103, r226, 0
cjmpne r103, r227, 0
cjmpne r103, r228, 0
cjmpne r103, r229, 0
cjmpne r103, r230, 0
cjmpne r103, r231, 0
cjmpne r103, r232, 0
cjmpne r103, r233, 0
cjmpne r103, r234, 0
cjmpne r103, r235, 0
cjmpne r103, r236, 0
cjmpne r103, r237, 0
cjmpne r103, r238, 0
cjmpne r103, r239, 0
cjmpne r103, r240, 0
cjmpne r103, r241, 0
cjmpne r103, r242, 0
cjmpne r103, r243, 0
cjmpne r103, r244, 0
cjmpne r103, r245, 0
cjmpne r103, r246, 0
cjmpne r103, r247, 0
cjmpne r103, r248, 0
cjmpne r103, r249, 0
cjmpne r103, r250, 0
cjmpne r103, r251, 0
cjmpne r103, r252, 0
cjmpne r103, r253, 0
cjmpne r103, r254, 0
cjmpne r103, r255, 0
lc r0, jump0
jmp r0
reg_is_nonzero:
sw r100, 2 // failure: register is not initialized
jmp r101
// Test different jump conditions
jump0:
lc r0, jump1
jmp r0
sw r100, 3 // failure: this instruction should not be reachable
jmp r101
jump1:
lc r0, jump2
mov r1, 100
cjmpne r0, r1, 101
sw r100, 4 // failure: required jump is not taken
jmp r101
jump2:
lc r0, jump3
cjmpe r0, r1, 100
sw r100, 5 // failure: required jump is not taken
jmp r101
jump3:
lc r0, jump4
cjmpuge r0, r1, 99
sw r100, 6 // failure: required jump is not taken
jmp r101
jump4:
lc r0, jump5
cjmpuge r0, r1, 100
sw r100, 7 // failure: required jump is not taken
jmp r101
jump5:
lc r0, jump6
cjmpug r0, r1, 99
sw r100, 8 // failure: required jump is not taken
jmp r101
jump6:
lc r0, jump7
cjmpsge r0, r1, -128
sw r100, 9 // failure: required jump is not taken
jmp r101
jump7:
lc r0, jump8
cjmpsge r0, r1, 100
sw r100, 10 // failure: required jump is not taken
jmp r101
jump8:
lc r0, jump9
cjmpsg r0, r1, 99
sw r100, 11 // failure: required jump is not taken
jmp r101
jump9:
lc r0, 2227053353
lc r1, 2933288161
cjmpug r102, r0, r1
 
lc r0, 3957963761
lc r1, 4048130130
cjmpug r102, r0, r1
 
lc r0, 1021028019
lc r1, 2570980487
cjmpug r102, r0, r1
 
lc r0, 470638116
lc r1, 3729241862
cjmpug r102, r0, r1
 
lc r0, 2794175299
lc r1, 3360494259
cjmpug r102, r0, r1
 
lc r0, 522532873
lc r1, 2103051039
cjmpug r102, r0, r1
 
lc r0, 994440598
lc r1, 4241216605
cjmpug r102, r0, r1
 
lc r0, 176753939
lc r1, 850320156
cjmpug r102, r0, r1
 
lc r0, 3998259744
lc r1, 4248205376
cjmpug r102, r0, r1
 
lc r0, 3695803806
lc r1, 4130490642
cjmpug r102, r0, r1
 
lc r0, -798605244
lc r1, -233549907
cjmpsg r102, r0, r1
 
lc r0, -1221540757
lc r1, 580991794
cjmpsg r102, r0, r1
 
lc r0, -1651432714
lc r1, -635466783
cjmpsg r102, r0, r1
 
lc r0, 43633328
lc r1, 1235055289
cjmpsg r102, r0, r1
 
lc r0, -2132159079
lc r1, -981565396
cjmpsg r102, r0, r1
 
lc r0, -859182414
lc r1, -697843885
cjmpsg r102, r0, r1
 
lc r0, 1720638509
lc r1, 2127959231
cjmpsg r102, r0, r1
 
lc r0, -1888878751
lc r1, 1230499715
cjmpsg r102, r0, r1
 
lc r0, 517066081
lc r1, 1914084509
cjmpsg r102, r0, r1
 
lc r0, -266475918
lc r1, 2001358724
cjmpsg r102, r0, r1
 
mov r1, 100
cjmpe r102, r1, 101
cjmpne r102, r1, 100
cjmpuge r102, r1, 101
cjmpug r102, r1, 100
cjmpug r102, r1, 101
cjmpsge r102, r1, 101
cjmpsg r102, r1, 101
cjmpsg r102, r1, 100
cjmpsg r102, -128, r1
lc r0, jump10
jmp r0
bad_jump:
sw r100, 12 // failure: jump should not be taken
jmp r101
jump10:
 
// Copy itself to another portion of memory
mov r0, 0 // source pointer
lc r1, 0x00008000 // destination pointer
lc r2, halt@2 // size of block to copy, in bytes
lc r32, copy_loop
copy_loop:
lw r3, r0
sw r1, r3
add r0, r0, 4
add r1, r1, 4
cjmpul r32, r0, r2
 
// Calculate sum of program body in a post-condition loop
mov r0, 0 // pointer
mov r16, 0 // sum
lc r32, sum_loop
sum_loop:
lw r1, r0
add r16, r16, r1
add r0, r0, 4
cjmpul r32, r0, r2
 
// Calculate sum of copied program body with negative sign, in a pre-condition loop
lc r0, 0x00008000 // pointer
add r2, r0, r2 // end pointer
mov r17, 0 // sum
lc r32, sum2_loop
lc r33, sum2_end
sum2_loop:
cjmpuge r33, r0, r2
lw r1, r0
sub r17, r17, r1
add r0, r0, 4
jmp r32
sw r100, 13 // failure: this instruction should not be reachable
jmp r101
 
sum2_end:
 
// Check that sums are equal (but with opposite signs)
add r0, r16, r17 // r0 should be zero now
lc r32, success
cjmpe r32, r0, 0
sw r100, 14 // failure: results do not match
jmp r101
success:
sw r100, 1
halt:
hlt
jmp r101
/firmware/test002.asm
1,93 → 1,93
/*
* This test calculates a few Fibonacci sequence members
* end compares them to pre-calculated values.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
// Calculate Fibonacci sequence members
mov r16, 0 // current member
mov r17, 1 // next member
lc r18, 0 // counter
lc r19, 0x00008000 // destination pointer
lc r32, calc_loop
calc_loop:
sw r19, r16
add r19, r19, 4
add r18, r18, 1
add r0, r16, r17
mov r16, r17
mov r17, r0
cjmpul r32, r18, 40
// Compare
lc r16, 0x00008000
lc r17, expected
mov r18, 0 // counter
lc r32, comp_loop
lc r33, comp_differ
comp_loop:
lw r0, r16
lw r1, r17
cjmpne r33, r0, r1
add r16, r16, 4
add r17, r17, 4
add r18, r18, 1
cjmpul r32, r18, 40
// Everything seems to be OK
sw r100, 1
halt:
hlt
jmp r101
comp_differ:
sw r100, 2
jmp r101
 
// Expected (pre-calculated) values
expected:
.word 0
.word 1
.word 1
.word 2
.word 3
.word 5
.word 8
.word 13
.word 21
.word 34
.word 55
.word 89
.word 144
.word 233
.word 377
.word 610
.word 987
.word 1597
.word 2584
.word 4181
.word 6765
.word 10946
.word 17711
.word 28657
.word 46368
.word 75025
.word 121393
.word 196418
.word 317811
.word 514229
.word 832040
.word 1346269
.word 2178309
.word 3524578
.word 5702887
.word 9227465
.word 14930352
.word 24157817
.word 39088169
.word 63245986
/*
* This test calculates a few Fibonacci sequence members
* end compares them to pre-calculated values.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
// Calculate Fibonacci sequence members
mov r16, 0 // current member
mov r17, 1 // next member
lc r18, 0 // counter
lc r19, 0x00008000 // destination pointer
lc r32, calc_loop
calc_loop:
sw r19, r16
add r19, r19, 4
add r18, r18, 1
add r0, r16, r17
mov r16, r17
mov r17, r0
cjmpul r32, r18, 40
// Compare
lc r16, 0x00008000
lc r17, expected
mov r18, 0 // counter
lc r32, comp_loop
lc r33, comp_differ
comp_loop:
lw r0, r16
lw r1, r17
cjmpne r33, r0, r1
add r16, r16, 4
add r17, r17, 4
add r18, r18, 1
cjmpul r32, r18, 40
// Everything seems to be OK
sw r100, 1
halt:
hlt
jmp r101
comp_differ:
sw r100, 2
jmp r101
 
// Expected (pre-calculated) values
expected:
.word 0
.word 1
.word 1
.word 2
.word 3
.word 5
.word 8
.word 13
.word 21
.word 34
.word 55
.word 89
.word 144
.word 233
.word 377
.word 610
.word 987
.word 1597
.word 2584
.word 4181
.word 6765
.word 10946
.word 17711
.word 28657
.word 46368
.word 75025
.word 121393
.word 196418
.word 317811
.word 514229
.word 832040
.word 1346269
.word 2178309
.word 3524578
.word 5702887
.word 9227465
.word 14930352
.word 24157817
.word 39088169
.word 63245986
/firmware/test003.asm
1,43 → 1,43
/*
* This test verifies that basic logical operations
* (and, xor, or, not) work.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
 
lc r0, 0xD54B65C0
lc r1, 0xCE8870A8
lc r16, 0x10000004 // destination pointer
and r2, r0, r1
sw r16, r2
lc r3, 0xC4086080
cjmpne r102, r2, r3
or r2, r0, r1
sw r16, r2
lc r3, 0xDFCB75E8
cjmpne r102, r2, r3
xor r2, r0, r1
sw r16, r2
lc r3, 0x1BC31568
cjmpne r102, r2, r3
// Note: "not dst, src" is just an alias for "xor dst, src, -1"
not r2, r0
sw r16, r2
lc r3, 0x2AB49A3F
cjmpne r102, r2, r3
sw r100, 1
jmp r101
failure:
sw r100, 2
 
halt:
hlt
jmp r101
/*
* This test verifies that basic logical operations
* (and, xor, or, not) work.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
 
lc r0, 0xD54B65C0
lc r1, 0xCE8870A8
lc r16, 0x10000004 // destination pointer
and r2, r0, r1
sw r16, r2
lc r3, 0xC4086080
cjmpne r102, r2, r3
or r2, r0, r1
sw r16, r2
lc r3, 0xDFCB75E8
cjmpne r102, r2, r3
xor r2, r0, r1
sw r16, r2
lc r3, 0x1BC31568
cjmpne r102, r2, r3
// Note: "not dst, src" is just an alias for "xor dst, src, -1"
not r2, r0
sw r16, r2
lc r3, 0x2AB49A3F
cjmpne r102, r2, r3
sw r100, 1
jmp r101
failure:
sw r100, 2
 
halt:
hlt
jmp r101
/firmware/test004.asm
1,548 → 1,548
/*
* This test verifies that nop instruction does not change
* register values.
*/
 
lc r0, failure
nop
mov r1, 1
nop
mov r2, 2
mov r3, 3
nop
mov r4, 4
mov r5, 5
mov r6, 6
nop
nop
mov r7, 7
mov r8, 8
mov r9, 9
nop
mov r10, 10
mov r11, 11
mov r12, 12
mov r13, 13
mov r14, 14
mov r15, 15
mov r16, 16
mov r17, 17
mov r18, 18
mov r19, 19
mov r20, 20
mov r21, 21
mov r22, 22
mov r23, 23
mov r24, 24
mov r25, 25
mov r26, 26
mov r27, 27
mov r28, 28
mov r29, 29
mov r30, 30
mov r31, 31
mov r32, 32
mov r33, 33
mov r34, 34
mov r35, 35
mov r36, 36
mov r37, 37
mov r38, 38
mov r39, 39
mov r40, 40
mov r41, 41
mov r42, 42
mov r43, 43
mov r44, 44
mov r45, 45
mov r46, 46
mov r47, 47
mov r48, 48
mov r49, 49
mov r50, 50
mov r51, 51
mov r52, 52
mov r53, 53
mov r54, 54
mov r55, 55
mov r56, 56
mov r57, 57
mov r58, 58
mov r59, 59
mov r60, 60
mov r61, 61
mov r62, 62
mov r63, 63
mov r64, 64
mov r65, 65
mov r66, 66
mov r67, 67
mov r68, 68
mov r69, 69
mov r70, 70
mov r71, 71
mov r72, 72
mov r73, 73
mov r74, 74
mov r75, 75
mov r76, 76
mov r77, 77
mov r78, 78
mov r79, 79
mov r80, 80
mov r81, 81
mov r82, 82
mov r83, 83
mov r84, 84
mov r85, 85
mov r86, 86
mov r87, 87
mov r88, 88
mov r89, 89
mov r90, 90
mov r91, 91
mov r92, 92
mov r93, 93
mov r94, 94
mov r95, 95
mov r96, 96
mov r97, 97
mov r98, 98
mov r99, 99
mov r100, 0
mov r101, 1
mov r102, 2
mov r103, 3
mov r104, 4
mov r105, 5
mov r106, 6
mov r107, 7
mov r108, 8
mov r109, 9
mov r110, 10
mov r111, 11
mov r112, 12
mov r113, 13
mov r114, 14
mov r115, 15
mov r116, 16
mov r117, 17
mov r118, 18
mov r119, 19
mov r120, 20
mov r121, 21
mov r122, 22
mov r123, 23
mov r124, 24
mov r125, 25
mov r126, 26
mov r127, 27
mov r128, 28
mov r129, 29
mov r130, 30
mov r131, 31
mov r132, 32
mov r133, 33
mov r134, 34
mov r135, 35
mov r136, 36
mov r137, 37
mov r138, 38
mov r139, 39
mov r140, 40
mov r141, 41
mov r142, 42
mov r143, 43
mov r144, 44
mov r145, 45
mov r146, 46
mov r147, 47
mov r148, 48
mov r149, 49
mov r150, 50
mov r151, 51
mov r152, 52
mov r153, 53
mov r154, 54
mov r155, 55
mov r156, 56
mov r157, 57
mov r158, 58
mov r159, 59
mov r160, 60
mov r161, 61
mov r162, 62
mov r163, 63
mov r164, 64
mov r165, 65
mov r166, 66
mov r167, 67
mov r168, 68
mov r169, 69
mov r170, 70
mov r171, 71
mov r172, 72
mov r173, 73
mov r174, 74
mov r175, 75
mov r176, 76
mov r177, 77
mov r178, 78
mov r179, 79
mov r180, 80
mov r181, 81
mov r182, 82
mov r183, 83
mov r184, 84
mov r185, 85
mov r186, 86
mov r187, 87
mov r188, 88
mov r189, 89
mov r190, 90
mov r191, 91
mov r192, 92
mov r193, 93
mov r194, 94
mov r195, 95
mov r196, 96
mov r197, 97
mov r198, 98
mov r199, 99
mov r200, 0
mov r201, 1
mov r202, 2
mov r203, 3
mov r204, 4
mov r205, 5
mov r206, 6
mov r207, 7
mov r208, 8
mov r209, 9
mov r210, 10
mov r211, 11
mov r212, 12
mov r213, 13
mov r214, 14
mov r215, 15
mov r216, 16
mov r217, 17
mov r218, 18
mov r219, 19
mov r220, 20
mov r221, 21
mov r222, 22
mov r223, 23
mov r224, 24
mov r225, 25
mov r226, 26
mov r227, 27
mov r228, 28
mov r229, 29
mov r230, 30
mov r231, 31
mov r232, 32
mov r233, 33
mov r234, 34
mov r235, 35
mov r236, 36
mov r237, 37
mov r238, 38
mov r239, 39
mov r240, 40
mov r241, 41
mov r242, 42
mov r243, 43
mov r244, 44
mov r245, 45
mov r246, 46
mov r247, 47
mov r248, 48
mov r249, 49
mov r250, 50
mov r251, 51
mov r252, 52
mov r253, 53
mov r254, 54
mov r255, 55
nop
nop
nop
cjmpne r0, r1, 1
nop
cjmpne r0, r2, 2
nop
nop
cjmpne r0, r3, 3
cjmpne r0, r4, 4
cjmpne r0, r5, 5
nop
cjmpne r0, r6, 6
cjmpne r0, r7, 7
cjmpne r0, r8, 8
cjmpne r0, r9, 9
cjmpne r0, r10, 10
cjmpne r0, r11, 11
nop
nop
nop
cjmpne r0, r12, 12
cjmpne r0, r13, 13
cjmpne r0, r14, 14
cjmpne r0, r15, 15
cjmpne r0, r16, 16
cjmpne r0, r17, 17
cjmpne r0, r18, 18
cjmpne r0, r19, 19
cjmpne r0, r20, 20
cjmpne r0, r21, 21
cjmpne r0, r22, 22
cjmpne r0, r23, 23
cjmpne r0, r24, 24
cjmpne r0, r25, 25
cjmpne r0, r26, 26
cjmpne r0, r27, 27
cjmpne r0, r28, 28
cjmpne r0, r29, 29
cjmpne r0, r30, 30
cjmpne r0, r31, 31
cjmpne r0, r32, 32
cjmpne r0, r33, 33
cjmpne r0, r34, 34
cjmpne r0, r35, 35
cjmpne r0, r36, 36
cjmpne r0, r37, 37
cjmpne r0, r38, 38
cjmpne r0, r39, 39
cjmpne r0, r40, 40
cjmpne r0, r41, 41
cjmpne r0, r42, 42
cjmpne r0, r43, 43
cjmpne r0, r44, 44
cjmpne r0, r45, 45
cjmpne r0, r46, 46
cjmpne r0, r47, 47
cjmpne r0, r48, 48
cjmpne r0, r49, 49
cjmpne r0, r50, 50
cjmpne r0, r51, 51
cjmpne r0, r52, 52
cjmpne r0, r53, 53
cjmpne r0, r54, 54
cjmpne r0, r55, 55
cjmpne r0, r56, 56
cjmpne r0, r57, 57
cjmpne r0, r58, 58
cjmpne r0, r59, 59
cjmpne r0, r60, 60
cjmpne r0, r61, 61
cjmpne r0, r62, 62
cjmpne r0, r63, 63
cjmpne r0, r64, 64
cjmpne r0, r65, 65
cjmpne r0, r66, 66
cjmpne r0, r67, 67
cjmpne r0, r68, 68
cjmpne r0, r69, 69
cjmpne r0, r70, 70
cjmpne r0, r71, 71
cjmpne r0, r72, 72
cjmpne r0, r73, 73
cjmpne r0, r74, 74
cjmpne r0, r75, 75
cjmpne r0, r76, 76
cjmpne r0, r77, 77
cjmpne r0, r78, 78
cjmpne r0, r79, 79
cjmpne r0, r80, 80
cjmpne r0, r81, 81
cjmpne r0, r82, 82
cjmpne r0, r83, 83
cjmpne r0, r84, 84
cjmpne r0, r85, 85
cjmpne r0, r86, 86
cjmpne r0, r87, 87
cjmpne r0, r88, 88
cjmpne r0, r89, 89
cjmpne r0, r90, 90
cjmpne r0, r91, 91
cjmpne r0, r92, 92
cjmpne r0, r93, 93
cjmpne r0, r94, 94
cjmpne r0, r95, 95
cjmpne r0, r96, 96
cjmpne r0, r97, 97
cjmpne r0, r98, 98
cjmpne r0, r99, 99
cjmpne r0, r100, 0
cjmpne r0, r101, 1
cjmpne r0, r102, 2
cjmpne r0, r103, 3
cjmpne r0, r104, 4
cjmpne r0, r105, 5
cjmpne r0, r106, 6
cjmpne r0, r107, 7
cjmpne r0, r108, 8
cjmpne r0, r109, 9
cjmpne r0, r110, 10
cjmpne r0, r111, 11
cjmpne r0, r112, 12
cjmpne r0, r113, 13
cjmpne r0, r114, 14
cjmpne r0, r115, 15
cjmpne r0, r116, 16
cjmpne r0, r117, 17
cjmpne r0, r118, 18
cjmpne r0, r119, 19
cjmpne r0, r120, 20
cjmpne r0, r121, 21
cjmpne r0, r122, 22
cjmpne r0, r123, 23
cjmpne r0, r124, 24
cjmpne r0, r125, 25
cjmpne r0, r126, 26
cjmpne r0, r127, 27
cjmpne r0, r128, 28
cjmpne r0, r129, 29
cjmpne r0, r130, 30
cjmpne r0, r131, 31
cjmpne r0, r132, 32
cjmpne r0, r133, 33
cjmpne r0, r134, 34
cjmpne r0, r135, 35
cjmpne r0, r136, 36
cjmpne r0, r137, 37
cjmpne r0, r138, 38
cjmpne r0, r139, 39
cjmpne r0, r140, 40
cjmpne r0, r141, 41
cjmpne r0, r142, 42
cjmpne r0, r143, 43
cjmpne r0, r144, 44
cjmpne r0, r145, 45
cjmpne r0, r146, 46
cjmpne r0, r147, 47
cjmpne r0, r148, 48
cjmpne r0, r149, 49
cjmpne r0, r150, 50
cjmpne r0, r151, 51
cjmpne r0, r152, 52
cjmpne r0, r153, 53
cjmpne r0, r154, 54
cjmpne r0, r155, 55
cjmpne r0, r156, 56
cjmpne r0, r157, 57
cjmpne r0, r158, 58
cjmpne r0, r159, 59
cjmpne r0, r160, 60
cjmpne r0, r161, 61
cjmpne r0, r162, 62
cjmpne r0, r163, 63
cjmpne r0, r164, 64
cjmpne r0, r165, 65
cjmpne r0, r166, 66
cjmpne r0, r167, 67
cjmpne r0, r168, 68
cjmpne r0, r169, 69
cjmpne r0, r170, 70
cjmpne r0, r171, 71
cjmpne r0, r172, 72
cjmpne r0, r173, 73
cjmpne r0, r174, 74
cjmpne r0, r175, 75
cjmpne r0, r176, 76
cjmpne r0, r177, 77
cjmpne r0, r178, 78
cjmpne r0, r179, 79
cjmpne r0, r180, 80
cjmpne r0, r181, 81
cjmpne r0, r182, 82
cjmpne r0, r183, 83
cjmpne r0, r184, 84
cjmpne r0, r185, 85
cjmpne r0, r186, 86
cjmpne r0, r187, 87
cjmpne r0, r188, 88
cjmpne r0, r189, 89
cjmpne r0, r190, 90
cjmpne r0, r191, 91
cjmpne r0, r192, 92
cjmpne r0, r193, 93
cjmpne r0, r194, 94
cjmpne r0, r195, 95
cjmpne r0, r196, 96
cjmpne r0, r197, 97
cjmpne r0, r198, 98
cjmpne r0, r199, 99
cjmpne r0, r200, 0
cjmpne r0, r201, 1
cjmpne r0, r202, 2
cjmpne r0, r203, 3
cjmpne r0, r204, 4
cjmpne r0, r205, 5
cjmpne r0, r206, 6
cjmpne r0, r207, 7
cjmpne r0, r208, 8
cjmpne r0, r209, 9
cjmpne r0, r210, 10
cjmpne r0, r211, 11
cjmpne r0, r212, 12
cjmpne r0, r213, 13
cjmpne r0, r214, 14
cjmpne r0, r215, 15
cjmpne r0, r216, 16
cjmpne r0, r217, 17
cjmpne r0, r218, 18
cjmpne r0, r219, 19
cjmpne r0, r220, 20
cjmpne r0, r221, 21
cjmpne r0, r222, 22
cjmpne r0, r223, 23
cjmpne r0, r224, 24
cjmpne r0, r225, 25
cjmpne r0, r226, 26
cjmpne r0, r227, 27
cjmpne r0, r228, 28
cjmpne r0, r229, 29
cjmpne r0, r230, 30
cjmpne r0, r231, 31
cjmpne r0, r232, 32
cjmpne r0, r233, 33
cjmpne r0, r234, 34
cjmpne r0, r235, 35
cjmpne r0, r236, 36
cjmpne r0, r237, 37
cjmpne r0, r238, 38
cjmpne r0, r239, 39
cjmpne r0, r240, 40
cjmpne r0, r241, 41
cjmpne r0, r242, 42
cjmpne r0, r243, 43
cjmpne r0, r244, 44
cjmpne r0, r245, 45
cjmpne r0, r246, 46
cjmpne r0, r247, 47
cjmpne r0, r248, 48
cjmpne r0, r249, 49
cjmpne r0, r250, 50
cjmpne r0, r251, 51
cjmpne r0, r252, 52
cjmpne r0, r253, 53
cjmpne r0, r254, 54
cjmpne r0, r255, 55
lc r100, 0x10000000
lc r101, halt
sw r100, 1
jmp r101
failure:
lc r100, 0x10000000
lc r101, halt
sw r100, 2
halt:
hlt
jmp r101
/*
* This test verifies that nop instruction does not change
* register values.
*/
 
lc r0, failure
nop
mov r1, 1
nop
mov r2, 2
mov r3, 3
nop
mov r4, 4
mov r5, 5
mov r6, 6
nop
nop
mov r7, 7
mov r8, 8
mov r9, 9
nop
mov r10, 10
mov r11, 11
mov r12, 12
mov r13, 13
mov r14, 14
mov r15, 15
mov r16, 16
mov r17, 17
mov r18, 18
mov r19, 19
mov r20, 20
mov r21, 21
mov r22, 22
mov r23, 23
mov r24, 24
mov r25, 25
mov r26, 26
mov r27, 27
mov r28, 28
mov r29, 29
mov r30, 30
mov r31, 31
mov r32, 32
mov r33, 33
mov r34, 34
mov r35, 35
mov r36, 36
mov r37, 37
mov r38, 38
mov r39, 39
mov r40, 40
mov r41, 41
mov r42, 42
mov r43, 43
mov r44, 44
mov r45, 45
mov r46, 46
mov r47, 47
mov r48, 48
mov r49, 49
mov r50, 50
mov r51, 51
mov r52, 52
mov r53, 53
mov r54, 54
mov r55, 55
mov r56, 56
mov r57, 57
mov r58, 58
mov r59, 59
mov r60, 60
mov r61, 61
mov r62, 62
mov r63, 63
mov r64, 64
mov r65, 65
mov r66, 66
mov r67, 67
mov r68, 68
mov r69, 69
mov r70, 70
mov r71, 71
mov r72, 72
mov r73, 73
mov r74, 74
mov r75, 75
mov r76, 76
mov r77, 77
mov r78, 78
mov r79, 79
mov r80, 80
mov r81, 81
mov r82, 82
mov r83, 83
mov r84, 84
mov r85, 85
mov r86, 86
mov r87, 87
mov r88, 88
mov r89, 89
mov r90, 90
mov r91, 91
mov r92, 92
mov r93, 93
mov r94, 94
mov r95, 95
mov r96, 96
mov r97, 97
mov r98, 98
mov r99, 99
mov r100, 0
mov r101, 1
mov r102, 2
mov r103, 3
mov r104, 4
mov r105, 5
mov r106, 6
mov r107, 7
mov r108, 8
mov r109, 9
mov r110, 10
mov r111, 11
mov r112, 12
mov r113, 13
mov r114, 14
mov r115, 15
mov r116, 16
mov r117, 17
mov r118, 18
mov r119, 19
mov r120, 20
mov r121, 21
mov r122, 22
mov r123, 23
mov r124, 24
mov r125, 25
mov r126, 26
mov r127, 27
mov r128, 28
mov r129, 29
mov r130, 30
mov r131, 31
mov r132, 32
mov r133, 33
mov r134, 34
mov r135, 35
mov r136, 36
mov r137, 37
mov r138, 38
mov r139, 39
mov r140, 40
mov r141, 41
mov r142, 42
mov r143, 43
mov r144, 44
mov r145, 45
mov r146, 46
mov r147, 47
mov r148, 48
mov r149, 49
mov r150, 50
mov r151, 51
mov r152, 52
mov r153, 53
mov r154, 54
mov r155, 55
mov r156, 56
mov r157, 57
mov r158, 58
mov r159, 59
mov r160, 60
mov r161, 61
mov r162, 62
mov r163, 63
mov r164, 64
mov r165, 65
mov r166, 66
mov r167, 67
mov r168, 68
mov r169, 69
mov r170, 70
mov r171, 71
mov r172, 72
mov r173, 73
mov r174, 74
mov r175, 75
mov r176, 76
mov r177, 77
mov r178, 78
mov r179, 79
mov r180, 80
mov r181, 81
mov r182, 82
mov r183, 83
mov r184, 84
mov r185, 85
mov r186, 86
mov r187, 87
mov r188, 88
mov r189, 89
mov r190, 90
mov r191, 91
mov r192, 92
mov r193, 93
mov r194, 94
mov r195, 95
mov r196, 96
mov r197, 97
mov r198, 98
mov r199, 99
mov r200, 0
mov r201, 1
mov r202, 2
mov r203, 3
mov r204, 4
mov r205, 5
mov r206, 6
mov r207, 7
mov r208, 8
mov r209, 9
mov r210, 10
mov r211, 11
mov r212, 12
mov r213, 13
mov r214, 14
mov r215, 15
mov r216, 16
mov r217, 17
mov r218, 18
mov r219, 19
mov r220, 20
mov r221, 21
mov r222, 22
mov r223, 23
mov r224, 24
mov r225, 25
mov r226, 26
mov r227, 27
mov r228, 28
mov r229, 29
mov r230, 30
mov r231, 31
mov r232, 32
mov r233, 33
mov r234, 34
mov r235, 35
mov r236, 36
mov r237, 37
mov r238, 38
mov r239, 39
mov r240, 40
mov r241, 41
mov r242, 42
mov r243, 43
mov r244, 44
mov r245, 45
mov r246, 46
mov r247, 47
mov r248, 48
mov r249, 49
mov r250, 50
mov r251, 51
mov r252, 52
mov r253, 53
mov r254, 54
mov r255, 55
nop
nop
nop
cjmpne r0, r1, 1
nop
cjmpne r0, r2, 2
nop
nop
cjmpne r0, r3, 3
cjmpne r0, r4, 4
cjmpne r0, r5, 5
nop
cjmpne r0, r6, 6
cjmpne r0, r7, 7
cjmpne r0, r8, 8
cjmpne r0, r9, 9
cjmpne r0, r10, 10
cjmpne r0, r11, 11
nop
nop
nop
cjmpne r0, r12, 12
cjmpne r0, r13, 13
cjmpne r0, r14, 14
cjmpne r0, r15, 15
cjmpne r0, r16, 16
cjmpne r0, r17, 17
cjmpne r0, r18, 18
cjmpne r0, r19, 19
cjmpne r0, r20, 20
cjmpne r0, r21, 21
cjmpne r0, r22, 22
cjmpne r0, r23, 23
cjmpne r0, r24, 24
cjmpne r0, r25, 25
cjmpne r0, r26, 26
cjmpne r0, r27, 27
cjmpne r0, r28, 28
cjmpne r0, r29, 29
cjmpne r0, r30, 30
cjmpne r0, r31, 31
cjmpne r0, r32, 32
cjmpne r0, r33, 33
cjmpne r0, r34, 34
cjmpne r0, r35, 35
cjmpne r0, r36, 36
cjmpne r0, r37, 37
cjmpne r0, r38, 38
cjmpne r0, r39, 39
cjmpne r0, r40, 40
cjmpne r0, r41, 41
cjmpne r0, r42, 42
cjmpne r0, r43, 43
cjmpne r0, r44, 44
cjmpne r0, r45, 45
cjmpne r0, r46, 46
cjmpne r0, r47, 47
cjmpne r0, r48, 48
cjmpne r0, r49, 49
cjmpne r0, r50, 50
cjmpne r0, r51, 51
cjmpne r0, r52, 52
cjmpne r0, r53, 53
cjmpne r0, r54, 54
cjmpne r0, r55, 55
cjmpne r0, r56, 56
cjmpne r0, r57, 57
cjmpne r0, r58, 58
cjmpne r0, r59, 59
cjmpne r0, r60, 60
cjmpne r0, r61, 61
cjmpne r0, r62, 62
cjmpne r0, r63, 63
cjmpne r0, r64, 64
cjmpne r0, r65, 65
cjmpne r0, r66, 66
cjmpne r0, r67, 67
cjmpne r0, r68, 68
cjmpne r0, r69, 69
cjmpne r0, r70, 70
cjmpne r0, r71, 71
cjmpne r0, r72, 72
cjmpne r0, r73, 73
cjmpne r0, r74, 74
cjmpne r0, r75, 75
cjmpne r0, r76, 76
cjmpne r0, r77, 77
cjmpne r0, r78, 78
cjmpne r0, r79, 79
cjmpne r0, r80, 80
cjmpne r0, r81, 81
cjmpne r0, r82, 82
cjmpne r0, r83, 83
cjmpne r0, r84, 84
cjmpne r0, r85, 85
cjmpne r0, r86, 86
cjmpne r0, r87, 87
cjmpne r0, r88, 88
cjmpne r0, r89, 89
cjmpne r0, r90, 90
cjmpne r0, r91, 91
cjmpne r0, r92, 92
cjmpne r0, r93, 93
cjmpne r0, r94, 94
cjmpne r0, r95, 95
cjmpne r0, r96, 96
cjmpne r0, r97, 97
cjmpne r0, r98, 98
cjmpne r0, r99, 99
cjmpne r0, r100, 0
cjmpne r0, r101, 1
cjmpne r0, r102, 2
cjmpne r0, r103, 3
cjmpne r0, r104, 4
cjmpne r0, r105, 5
cjmpne r0, r106, 6
cjmpne r0, r107, 7
cjmpne r0, r108, 8
cjmpne r0, r109, 9
cjmpne r0, r110, 10
cjmpne r0, r111, 11
cjmpne r0, r112, 12
cjmpne r0, r113, 13
cjmpne r0, r114, 14
cjmpne r0, r115, 15
cjmpne r0, r116, 16
cjmpne r0, r117, 17
cjmpne r0, r118, 18
cjmpne r0, r119, 19
cjmpne r0, r120, 20
cjmpne r0, r121, 21
cjmpne r0, r122, 22
cjmpne r0, r123, 23
cjmpne r0, r124, 24
cjmpne r0, r125, 25
cjmpne r0, r126, 26
cjmpne r0, r127, 27
cjmpne r0, r128, 28
cjmpne r0, r129, 29
cjmpne r0, r130, 30
cjmpne r0, r131, 31
cjmpne r0, r132, 32
cjmpne r0, r133, 33
cjmpne r0, r134, 34
cjmpne r0, r135, 35
cjmpne r0, r136, 36
cjmpne r0, r137, 37
cjmpne r0, r138, 38
cjmpne r0, r139, 39
cjmpne r0, r140, 40
cjmpne r0, r141, 41
cjmpne r0, r142, 42
cjmpne r0, r143, 43
cjmpne r0, r144, 44
cjmpne r0, r145, 45
cjmpne r0, r146, 46
cjmpne r0, r147, 47
cjmpne r0, r148, 48
cjmpne r0, r149, 49
cjmpne r0, r150, 50
cjmpne r0, r151, 51
cjmpne r0, r152, 52
cjmpne r0, r153, 53
cjmpne r0, r154, 54
cjmpne r0, r155, 55
cjmpne r0, r156, 56
cjmpne r0, r157, 57
cjmpne r0, r158, 58
cjmpne r0, r159, 59
cjmpne r0, r160, 60
cjmpne r0, r161, 61
cjmpne r0, r162, 62
cjmpne r0, r163, 63
cjmpne r0, r164, 64
cjmpne r0, r165, 65
cjmpne r0, r166, 66
cjmpne r0, r167, 67
cjmpne r0, r168, 68
cjmpne r0, r169, 69
cjmpne r0, r170, 70
cjmpne r0, r171, 71
cjmpne r0, r172, 72
cjmpne r0, r173, 73
cjmpne r0, r174, 74
cjmpne r0, r175, 75
cjmpne r0, r176, 76
cjmpne r0, r177, 77
cjmpne r0, r178, 78
cjmpne r0, r179, 79
cjmpne r0, r180, 80
cjmpne r0, r181, 81
cjmpne r0, r182, 82
cjmpne r0, r183, 83
cjmpne r0, r184, 84
cjmpne r0, r185, 85
cjmpne r0, r186, 86
cjmpne r0, r187, 87
cjmpne r0, r188, 88
cjmpne r0, r189, 89
cjmpne r0, r190, 90
cjmpne r0, r191, 91
cjmpne r0, r192, 92
cjmpne r0, r193, 93
cjmpne r0, r194, 94
cjmpne r0, r195, 95
cjmpne r0, r196, 96
cjmpne r0, r197, 97
cjmpne r0, r198, 98
cjmpne r0, r199, 99
cjmpne r0, r200, 0
cjmpne r0, r201, 1
cjmpne r0, r202, 2
cjmpne r0, r203, 3
cjmpne r0, r204, 4
cjmpne r0, r205, 5
cjmpne r0, r206, 6
cjmpne r0, r207, 7
cjmpne r0, r208, 8
cjmpne r0, r209, 9
cjmpne r0, r210, 10
cjmpne r0, r211, 11
cjmpne r0, r212, 12
cjmpne r0, r213, 13
cjmpne r0, r214, 14
cjmpne r0, r215, 15
cjmpne r0, r216, 16
cjmpne r0, r217, 17
cjmpne r0, r218, 18
cjmpne r0, r219, 19
cjmpne r0, r220, 20
cjmpne r0, r221, 21
cjmpne r0, r222, 22
cjmpne r0, r223, 23
cjmpne r0, r224, 24
cjmpne r0, r225, 25
cjmpne r0, r226, 26
cjmpne r0, r227, 27
cjmpne r0, r228, 28
cjmpne r0, r229, 29
cjmpne r0, r230, 30
cjmpne r0, r231, 31
cjmpne r0, r232, 32
cjmpne r0, r233, 33
cjmpne r0, r234, 34
cjmpne r0, r235, 35
cjmpne r0, r236, 36
cjmpne r0, r237, 37
cjmpne r0, r238, 38
cjmpne r0, r239, 39
cjmpne r0, r240, 40
cjmpne r0, r241, 41
cjmpne r0, r242, 42
cjmpne r0, r243, 43
cjmpne r0, r244, 44
cjmpne r0, r245, 45
cjmpne r0, r246, 46
cjmpne r0, r247, 47
cjmpne r0, r248, 48
cjmpne r0, r249, 49
cjmpne r0, r250, 50
cjmpne r0, r251, 51
cjmpne r0, r252, 52
cjmpne r0, r253, 53
cjmpne r0, r254, 54
cjmpne r0, r255, 55
lc r100, 0x10000000
lc r101, halt
sw r100, 1
jmp r101
failure:
lc r100, 0x10000000
lc r101, halt
sw r100, 2
halt:
hlt
jmp r101
/firmware/test005.asm
1,81 → 1,81
/*
* This test verifies bytewise DBUS access
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
 
lc r16, 0x10000004 // output pointer
lc r17, data // input pointer
// Check for bytewise read
lc r18, 0xbc
lc r19, 0x9a
lc r20, 0x78
lc r21, 0x56
lc r22, 0xffffffbc
lc r23, 0xffffff9a
lc r24, 0x78
lc r25, 0x56
lub r0, r17
sw r16, r0
cjmpne r102, r0, r18
add r17, r17, 1
lub r0, r17
sw r16, r0
cjmpne r102, r0, r19
add r17, r17, 1
lub r0, r17
sw r16, r0
cjmpne r102, r0, r20
add r17, r17, 1
lub r0, r17
sw r16, r0
cjmpne r102, r0, r21
sub r17, r17, 3
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r22
add r17, r17, 1
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r23
add r17, r17, 1
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r24
add r17, r17, 1
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r25
// Check for bytewise write
lc r17, 0x00008004
sb r17, 0x12
add r17, r17, 1
sb r17, 0x34
add r17, r17, 1
sb r17, 0x56
add r17, r17, 1
sb r17, 0x78
 
// Read the whole word and compare
sub r17, r17, 3
lw r0, r17
lc r18, 0x78563412
cjmpne r102, r0, r18
sw r100, 1
jmp r101
failure:
sw r100, 2
 
halt:
hlt
jmp r101
data:
.word 0x56789ABC
/*
* This test verifies bytewise DBUS access
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
 
lc r16, 0x10000004 // output pointer
lc r17, data // input pointer
// Check for bytewise read
lc r18, 0xbc
lc r19, 0x9a
lc r20, 0x78
lc r21, 0x56
lc r22, 0xffffffbc
lc r23, 0xffffff9a
lc r24, 0x78
lc r25, 0x56
lub r0, r17
sw r16, r0
cjmpne r102, r0, r18
add r17, r17, 1
lub r0, r17
sw r16, r0
cjmpne r102, r0, r19
add r17, r17, 1
lub r0, r17
sw r16, r0
cjmpne r102, r0, r20
add r17, r17, 1
lub r0, r17
sw r16, r0
cjmpne r102, r0, r21
sub r17, r17, 3
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r22
add r17, r17, 1
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r23
add r17, r17, 1
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r24
add r17, r17, 1
lsb r0, r17
sw r16, r0
cjmpne r102, r0, r25
// Check for bytewise write
lc r17, 0x00008004
sb r17, 0x12
add r17, r17, 1
sb r17, 0x34
add r17, r17, 1
sb r17, 0x56
add r17, r17, 1
sb r17, 0x78
 
// Read the whole word and compare
sub r17, r17, 3
lw r0, r17
lc r18, 0x78563412
cjmpne r102, r0, r18
sw r100, 1
jmp r101
failure:
sw r100, 2
 
halt:
hlt
jmp r101
data:
.word 0x56789ABC
/firmware/test006.asm
1,33 → 1,33
/*
* This test checks for a bug with jump destination register
* being wrongly overwritten when jump instruction follows "lw"
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
 
lc r16, 0x10000004
lc r17, 0x12345678
lc r18, 0x12345678
sw r16, 123
lw r0, r16
cjmpne r17, 0, 0 // r17 used to be wrongly overwritten by the value of r16 here
sw r16, r17
nop
nop
cjmpne r102, r17, r18
sw r100, 1
jmp r101
 
failure:
sw r100, 2
halt:
hlt
jmp r101
/*
* This test checks for a bug with jump destination register
* being wrongly overwritten when jump instruction follows "lw"
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
 
lc r16, 0x10000004
lc r17, 0x12345678
lc r18, 0x12345678
sw r16, 123
lw r0, r16
cjmpne r17, 0, 0 // r17 used to be wrongly overwritten by the value of r16 here
sw r16, r17
nop
nop
cjmpne r102, r17, r18
sw r100, 1
jmp r101
 
failure:
sw r100, 2
halt:
hlt
jmp r101
/firmware/test007.asm
1,134 → 1,134
/*
* This test verifies bitwise shift operations.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r16, 0x10000004 // output pointer
// Test left shifts (by comparison with self-addition)
 
lc r0, 0x12345678
mov r3, r0 // for comparison
lc r32, sl_loop
mov r1, 0 // counter
sl_loop:
sl r2, r0, r1
sw r16, r2
cjmpne r102, r2, r3
add r1, r1, 1
add r3, r3, r3
cjmpul r32, r1, 32
// Test unsigned right shifts (by comparison with pre-calculated values)
 
lc r32, sru_loop
lc r17, sru_expected_data
mov r1, 0 // counter
sru_loop:
sru r2, r0, r1
sw r16, r2
lw r3, r17
cjmpne r102, r2, r3
add r1, r1, 1
add r17, r17, 4
cjmpul r32, r1, 32
// Test signed right shifts (by comparison with pre-calculated values)
 
lc r0, 0x87654321
lc r32, srs_loop
lc r17, srs_expected_data
mov r1, 0 // counter
srs_loop:
srs r2, r0, r1
sw r16, r2
lw r3, r17
cjmpne r102, r2, r3
add r1, r1, 1
add r17, r17, 4
cjmpul r32, r1, 32
// Report success
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
 
sru_expected_data:
.word 0x12345678
.word 0x091A2B3C
.word 0x048D159E
.word 0x02468ACF
.word 0x01234567
.word 0x0091A2B3
.word 0x0048D159
.word 0x002468AC
.word 0x00123456
.word 0x00091A2B
.word 0x00048D15
.word 0x0002468A
.word 0x00012345
.word 0x000091A2
.word 0x000048D1
.word 0x00002468
.word 0x00001234
.word 0x0000091A
.word 0x0000048D
.word 0x00000246
.word 0x00000123
.word 0x00000091
.word 0x00000048
.word 0x00000024
.word 0x00000012
.word 0x00000009
.word 0x00000004
.word 0x00000002
.word 0x00000001
.word 0x00000000
.word 0x00000000
.word 0x00000000
 
srs_expected_data:
.word 0x87654321
.word 0xC3B2A190
.word 0xE1D950C8
.word 0xF0ECA864
.word 0xF8765432
.word 0xFC3B2A19
.word 0xFE1D950C
.word 0xFF0ECA86
.word 0xFF876543
.word 0xFFC3B2A1
.word 0xFFE1D950
.word 0xFFF0ECA8
.word 0xFFF87654
.word 0xFFFC3B2A
.word 0xFFFE1D95
.word 0xFFFF0ECA
.word 0xFFFF8765
.word 0xFFFFC3B2
.word 0xFFFFE1D9
.word 0xFFFFF0EC
.word 0xFFFFF876
.word 0xFFFFFC3B
.word 0xFFFFFE1D
.word 0xFFFFFF0E
.word 0xFFFFFF87
.word 0xFFFFFFC3
.word 0xFFFFFFE1
.word 0xFFFFFFF0
.word 0xFFFFFFF8
.word 0xFFFFFFFC
.word 0xFFFFFFFE
.word 0xFFFFFFFF
/*
* This test verifies bitwise shift operations.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r16, 0x10000004 // output pointer
// Test left shifts (by comparison with self-addition)
 
lc r0, 0x12345678
mov r3, r0 // for comparison
lc r32, sl_loop
mov r1, 0 // counter
sl_loop:
sl r2, r0, r1
sw r16, r2
cjmpne r102, r2, r3
add r1, r1, 1
add r3, r3, r3
cjmpul r32, r1, 32
// Test unsigned right shifts (by comparison with pre-calculated values)
 
lc r32, sru_loop
lc r17, sru_expected_data
mov r1, 0 // counter
sru_loop:
sru r2, r0, r1
sw r16, r2
lw r3, r17
cjmpne r102, r2, r3
add r1, r1, 1
add r17, r17, 4
cjmpul r32, r1, 32
// Test signed right shifts (by comparison with pre-calculated values)
 
lc r0, 0x87654321
lc r32, srs_loop
lc r17, srs_expected_data
mov r1, 0 // counter
srs_loop:
srs r2, r0, r1
sw r16, r2
lw r3, r17
cjmpne r102, r2, r3
add r1, r1, 1
add r17, r17, 4
cjmpul r32, r1, 32
// Report success
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
 
sru_expected_data:
.word 0x12345678
.word 0x091A2B3C
.word 0x048D159E
.word 0x02468ACF
.word 0x01234567
.word 0x0091A2B3
.word 0x0048D159
.word 0x002468AC
.word 0x00123456
.word 0x00091A2B
.word 0x00048D15
.word 0x0002468A
.word 0x00012345
.word 0x000091A2
.word 0x000048D1
.word 0x00002468
.word 0x00001234
.word 0x0000091A
.word 0x0000048D
.word 0x00000246
.word 0x00000123
.word 0x00000091
.word 0x00000048
.word 0x00000024
.word 0x00000012
.word 0x00000009
.word 0x00000004
.word 0x00000002
.word 0x00000001
.word 0x00000000
.word 0x00000000
.word 0x00000000
 
srs_expected_data:
.word 0x87654321
.word 0xC3B2A190
.word 0xE1D950C8
.word 0xF0ECA864
.word 0xF8765432
.word 0xFC3B2A19
.word 0xFE1D950C
.word 0xFF0ECA86
.word 0xFF876543
.word 0xFFC3B2A1
.word 0xFFE1D950
.word 0xFFF0ECA8
.word 0xFFF87654
.word 0xFFFC3B2A
.word 0xFFFE1D95
.word 0xFFFF0ECA
.word 0xFFFF8765
.word 0xFFFFC3B2
.word 0xFFFFE1D9
.word 0xFFFFF0EC
.word 0xFFFFF876
.word 0xFFFFFC3B
.word 0xFFFFFE1D
.word 0xFFFFFF0E
.word 0xFFFFFF87
.word 0xFFFFFFC3
.word 0xFFFFFFE1
.word 0xFFFFFFF0
.word 0xFFFFFFF8
.word 0xFFFFFFFC
.word 0xFFFFFFFE
.word 0xFFFFFFFF
/firmware/test008.asm
1,59 → 1,59
/*
* This test calculates a CRC-32 checksum of a small byte array
* CRC32("123456789")=0xCBF43926
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r16, 0x10000004 // output pointer
lc r17, 0xFFFFFFFF // initial CRC value
lc r18, 0xEDB88320 // polynom
lc r19, data // input pointer
lc r32, byte_loop
lc r33, bit_loop
lc r34, dont_xor
mov r20, 0 // byte counter
byte_loop:
lub r0, r19
mov r21, 0 // bit counter
bit_loop:
and r1, r0, 1
and r2, r17, 1
sru r17, r17, 1
xor r3, r1, r2
cjmpe r34, r3, 0
xor r17, r17, r18
dont_xor:
sru r0, r0, 1
add r21, r21, 1
cjmpul r33, r21, 8
add r19, r19, 1
add r20, r20, 1
cjmpul r32, r20, 9
not r17, r17
sw r16, r17
lc r0, 0xCBF43926
cjmpne r102, r0, r17
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
data:
.byte "123456789"
/*
* This test calculates a CRC-32 checksum of a small byte array
* CRC32("123456789")=0xCBF43926
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r16, 0x10000004 // output pointer
lc r17, 0xFFFFFFFF // initial CRC value
lc r18, 0xEDB88320 // polynom
lc r19, data // input pointer
lc r32, byte_loop
lc r33, bit_loop
lc r34, dont_xor
mov r20, 0 // byte counter
byte_loop:
lub r0, r19
mov r21, 0 // bit counter
bit_loop:
and r1, r0, 1
and r2, r17, 1
sru r17, r17, 1
xor r3, r1, r2
cjmpe r34, r3, 0
xor r17, r17, r18
dont_xor:
sru r0, r0, 1
add r21, r21, 1
cjmpul r33, r21, 8
add r19, r19, 1
add r20, r20, 1
cjmpul r32, r20, 9
not r17, r17
sw r16, r17
lc r0, 0xCBF43926
cjmpne r102, r0, r17
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
data:
.byte "123456789"
/firmware/test009.asm
1,116 → 1,116
/*
* This test verifies call and ret instructions
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc sp, 0x00010000 // stack pointer
lc r0, 0x00008000
sw r0, 0
// Test simple procedure call
lc r1, testproc
call r1 // testproc
lw r0, r0
lc r1, 0x11223344
cjmpne r102, r0, r1 // failure
// Test jump directly to CALL instruction
lc r1, jump_to_call
lc r2, testproc2
jmp r1
nop
nop
nop
jump_to_call:
call r2
lw r0, r0
lc r1, 0x55667788
cjmpne r102, r0, r1 // failure
 
// Test recursive calls: calculate 10th Fibonnaci number
// using recursive algorithm
mov r0, 10 // argument
mov r16, 0 // how many times test_recursive has been called
lc r1, test_recursive
call r1 // test_recursive
lc r1, 0x00008000
sw r1, r0
add r1, r1, 4
sw r1, r16
lc r1, 55
cjmpne r102, r0, r1
lc r1, 177
cjmpne r102, r16, r1
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
testproc:
lc r0, 0x00008000
lc r1, 0x11223344
sw r0, r1
ret
testproc2:
lc r0, 0x00008000
lc r1, 0x55667788
sw r0, r1
ret
 
test_recursive:
add r16, r16, 1 // increment call counter
 
// If r0 is 0 or 1, just return
cjmpe rp, r0, 0
cjmpe rp, r0, 1
// Save return address in stack
sub sp, sp, 4
sw sp, rp
// Save argument in stack
sub sp, sp, 4
sw sp, r0
// Call itself for with (r0-1) and (r0-2) arguments
sub r0, r0, 1
lc r1, test_recursive
call r1
// Restore value from stack, save temporary result
lw r1, sp
sw sp, r0
sub r0, r1, 2
lc r1, test_recursive
call r1
// Restore result from stack
lw r1, sp
add sp, sp, 4
add r0, r0, r1
// Restore return address
lw rp, sp
add sp, sp, 4
ret
/*
* This test verifies call and ret instructions
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc sp, 0x00010000 // stack pointer
lc r0, 0x00008000
sw r0, 0
// Test simple procedure call
lc r1, testproc
call r1 // testproc
lw r0, r0
lc r1, 0x11223344
cjmpne r102, r0, r1 // failure
// Test jump directly to CALL instruction
lc r1, jump_to_call
lc r2, testproc2
jmp r1
nop
nop
nop
jump_to_call:
call r2
lw r0, r0
lc r1, 0x55667788
cjmpne r102, r0, r1 // failure
 
// Test recursive calls: calculate 10th Fibonnaci number
// using recursive algorithm
mov r0, 10 // argument
mov r16, 0 // how many times test_recursive has been called
lc r1, test_recursive
call r1 // test_recursive
lc r1, 0x00008000
sw r1, r0
add r1, r1, 4
sw r1, r16
lc r1, 55
cjmpne r102, r0, r1
lc r1, 177
cjmpne r102, r16, r1
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
testproc:
lc r0, 0x00008000
lc r1, 0x11223344
sw r0, r1
ret
testproc2:
lc r0, 0x00008000
lc r1, 0x55667788
sw r0, r1
ret
 
test_recursive:
add r16, r16, 1 // increment call counter
 
// If r0 is 0 or 1, just return
cjmpe rp, r0, 0
cjmpe rp, r0, 1
// Save return address in stack
sub sp, sp, 4
sw sp, rp
// Save argument in stack
sub sp, sp, 4
sw sp, r0
// Call itself for with (r0-1) and (r0-2) arguments
sub r0, r0, 1
lc r1, test_recursive
call r1
// Restore value from stack, save temporary result
lw r1, sp
sw sp, r0
sub r0, r1, 2
lc r1, test_recursive
call r1
// Restore result from stack
lw r1, sp
add sp, sp, 4
add r0, r0, r1
// Restore return address
lw rp, sp
add sp, sp, 4
ret
/firmware/test010.asm
1,54 → 1,54
/*
* This test verifies interrupt handling using a simple timer model
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lc iv0, timer_handler0
lc iv1, timer_handler1
mov cr, 3 // enable interrupts 0 and 1
lc r32, 2000 // cycle counter
lc r33, cnt_loop
mov r34, 0 // interrupt 0 call counter
mov r35, 0 // interrupt 1 call counter
sw r104, 100
sw r103, 10
cnt_loop:
sub r32, r32, 1
cjmpug r33, r32, 0 // cnt_loop
cjmpne r102, r34, 10 // failure
cjmpne r102, r35, 4 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
timer_handler0:
add r34, r34, 1
lc r0, 0x10000004
sw r0, r34
cjmpne irp, r34, 5 // exit interrupt handler if r34!=5
mov cr, 1 // disable interrupt 1
iret
 
timer_handler1:
add r35, r35, 1
// Interrupt 1 has lower priority than interrupt 0 and will be called later
cjmpne r102, r34, r35
lc r0, 0x10000008
sw r0, r35
iret
/*
* This test verifies interrupt handling using a simple timer model
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lc iv0, timer_handler0
lc iv1, timer_handler1
mov cr, 3 // enable interrupts 0 and 1
lc r32, 2000 // cycle counter
lc r33, cnt_loop
mov r34, 0 // interrupt 0 call counter
mov r35, 0 // interrupt 1 call counter
sw r104, 100
sw r103, 10
cnt_loop:
sub r32, r32, 1
cjmpug r33, r32, 0 // cnt_loop
cjmpne r102, r34, 10 // failure
cjmpne r102, r35, 4 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
timer_handler0:
add r34, r34, 1
lc r0, 0x10000004
sw r0, r34
cjmpne irp, r34, 5 // exit interrupt handler if r34!=5
mov cr, 1 // disable interrupt 1
iret
 
timer_handler1:
add r35, r35, 1
// Interrupt 1 has lower priority than interrupt 0 and will be called later
cjmpne r102, r34, r35
lc r0, 0x10000008
sw r0, r35
iret
/firmware/test011.asm
1,172 → 1,172
/*
* Coroutine switching test
*
* There are two coroutines in this test. The main coroutine calculates
* CRC32 of the 1024-byte data block. The secondary coroutine simulates
* a linear-feedback shift register (LFSR) with a polynom 1+x^6+x^7.
* It is invoked by the timer interrupt.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
// Set up secondary routine (invoked by timer)
mov r200, 127 // initial value
lc r201, 250 // counter (number of LFSR iterations)
mov r204, 0 // result
lc r210, 0x10000008 // secondary routine output pointer
lc iv0, timer_handler
mov cr, 1 // enable interrupt 0
sw r104, 100
lc r0, 0xFFFFFFFF
sw r103, r0 // activate timer, unlimited pulses
// Main routine
lc r16, 0x10000004 // output pointer
lc r17, 0xFFFFFFFF // initial CRC value
lc r18, 0xEDB88320 // polynom
lc r19, data // input pointer
lc r20, 256 // data block size in words
lc r32, word_loop
lc r33, bit_loop
lc r34, dont_xor
mov r64, 0 // word counter
word_loop:
lw r0, r19
mov r65, 0 // bit counter
bit_loop:
and r1, r0, 1
and r2, r17, 1
sru r17, r17, 1
xor r3, r1, r2
cjmpe r34, r3, 0 // dont_xor
xor r17, r17, r18
dont_xor:
sru r0, r0, 1
add r65, r65, 1
cjmpul r33, r65, 32 // bit_loop
sw r16, r17
add r19, r19, 4
add r64, r64, 1
cjmpul r32, r64, r20 // word_loop
not r17, r17
sw r16, r17
// Check main routine result
lc r0, 0x501860E6
cjmpne r102, r0, r17
// Wait until secondary routine finishes its job
lc r0, wait_secondary
wait_secondary:
cjmpe r0, r204, 0
// Check secondary routine result
cjmpne r102, r204, 0x57
sw r103, 0 // deactivate timer
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
 
timer_handler:
sru r202, r200, 5
sru r203, r200, 6
xor r202, r202, r203
and r202, r202, 1
sl r200, r200, 1
or r200, r200, r202
and r200, r200, 0x7f
sub r201, r201, 1
cjmpug irp, r201, 0 // exit interrupt handler if r201>0
mov r204, r200
sw r210, r204
mov cr, 0 // disable further interrupts
iret
.align
data:
.byte 0x00, 0x90, 0x31, 0xCF, 0x95, 0x7A, 0x59, 0xE5, 0xD2, 0xBF, 0x2C, 0xDB, 0xB5, 0x83, 0x4D, 0x03
.byte 0x17, 0x5D, 0x25, 0x2A, 0xFD, 0x72, 0x1E, 0x01, 0x02, 0x60, 0x88, 0x92, 0x9A, 0x9B, 0x2A, 0xA9
.byte 0x73, 0x5A, 0x0E, 0x9B, 0xC8, 0xCD, 0x85, 0x4D, 0xE0, 0xBA, 0xF4, 0xEC, 0x8A, 0x24, 0x76, 0x3C
.byte 0xDC, 0x35, 0xC7, 0xD7, 0xFF, 0xFF, 0x9C, 0x64, 0x44, 0x4C, 0xD7, 0x06, 0x60, 0x17, 0xAD, 0x0E
.byte 0x02, 0xEB, 0x46, 0x45, 0x96, 0xB0, 0xD6, 0xB9, 0x7C, 0x34, 0xBE, 0x77, 0x75, 0xF2, 0xBE, 0x1B
.byte 0x99, 0x62, 0xBC, 0x9B, 0x92, 0x5C, 0x26, 0x39, 0x6C, 0xCD, 0x84, 0xFD, 0xC0, 0x58, 0x2B, 0xA8
.byte 0x7D, 0x10, 0xB3, 0x81, 0x25, 0xF3, 0x24, 0xE7, 0xB1, 0x4D, 0x6D, 0x12, 0xF7, 0xAE, 0x27, 0xE0
.byte 0xD2, 0x95, 0x30, 0x2D, 0xD1, 0x79, 0x27, 0x81, 0xBB, 0x67, 0x47, 0x91, 0xAE, 0xC1, 0xB8, 0x79
.byte 0x1F, 0x5E, 0xD5, 0x08, 0x84, 0xA9, 0x6D, 0x1A, 0xF3, 0xEB, 0x8C, 0x58, 0x78, 0x5F, 0xD8, 0x51
.byte 0x74, 0x45, 0xFB, 0x4C, 0xBD, 0x91, 0x32, 0xC2, 0xD6, 0x65, 0x80, 0xE3, 0x07, 0xFE, 0x92, 0x0C
.byte 0x88, 0x31, 0xD7, 0xA0, 0xA8, 0x32, 0xD7, 0x1F, 0x1C, 0xBE, 0x50, 0xF0, 0x49, 0x56, 0x23, 0xBB
.byte 0xD5, 0xB5, 0x99, 0xBF, 0x40, 0x24, 0x00, 0x0F, 0xCE, 0xDA, 0x35, 0x1D, 0x8D, 0x03, 0x1D, 0x74
.byte 0xC0, 0xAF, 0x8B, 0x12, 0x6F, 0x33, 0xB2, 0x4A, 0x6F, 0x3B, 0x93, 0x88, 0xA0, 0x29, 0x81, 0xF6
.byte 0xB2, 0xEC, 0x30, 0x56, 0x2D, 0xFE, 0x75, 0xFF, 0x18, 0xA0, 0x18, 0x70, 0xEE, 0x0C, 0xE5, 0x4A
.byte 0x3A, 0xC4, 0x69, 0x33, 0xA0, 0x9A, 0x73, 0x77, 0x99, 0xA2, 0xDA, 0xD4, 0x9F, 0xB8, 0x90, 0x60
.byte 0x2F, 0xBC, 0x8E, 0xE7, 0x3E, 0x30, 0x9A, 0xB2, 0x95, 0x59, 0x7E, 0x14, 0xBD, 0x9C, 0x9E, 0xB0
.byte 0xCD, 0x26, 0x93, 0xDE, 0xE9, 0x9D, 0xBA, 0x0B, 0xAA, 0xF9, 0x50, 0x91, 0x4E, 0x2C, 0x1B, 0xDE
.byte 0xD9, 0xBE, 0x27, 0x53, 0x14, 0x13, 0xA4, 0xD1, 0x8B, 0x72, 0x68, 0x4C, 0x77, 0x80, 0x27, 0x52
.byte 0xBC, 0x50, 0xD3, 0xF5, 0xDF, 0xB9, 0x4C, 0xF1, 0x20, 0x10, 0xC8, 0x86, 0x9C, 0xF4, 0x12, 0xE0
.byte 0xA7, 0x52, 0x1A, 0x81, 0x3A, 0x4A, 0xEB, 0x8D, 0xA9, 0x1D, 0x7E, 0x61, 0x7F, 0xCB, 0x82, 0x61
.byte 0xB0, 0x88, 0x9B, 0x65, 0x01, 0xB5, 0x19, 0x9F, 0xDC, 0x7D, 0xBF, 0x7F, 0x61, 0xC9, 0x8D, 0x5B
.byte 0xF4, 0xA1, 0x2D, 0x5F, 0x21, 0xBE, 0xF3, 0x9C, 0x07, 0x54, 0x0E, 0xA3, 0x21, 0xD8, 0xDD, 0x98
.byte 0xB8, 0xDA, 0x03, 0x20, 0xB5, 0x9D, 0x37, 0x10, 0x2B, 0x9F, 0x57, 0x51, 0x5E, 0xA9, 0xCD, 0xCE
.byte 0x86, 0x9C, 0xCC, 0xE6, 0x25, 0xA1, 0x67, 0x40, 0x22, 0xDA, 0x10, 0x6D, 0x92, 0x4D, 0x8C, 0x39
.byte 0x4F, 0x1C, 0xCE, 0x22, 0x48, 0xC9, 0xE5, 0xCA, 0xBE, 0x9D, 0x5C, 0xDB, 0x3A, 0xDD, 0x3A, 0x3F
.byte 0x8A, 0xFC, 0x0D, 0x14, 0x86, 0x6D, 0x18, 0x42, 0xE4, 0x3B, 0x25, 0x20, 0xEE, 0x14, 0x0C, 0x0F
.byte 0x56, 0xEA, 0x66, 0x6E, 0xF2, 0xD6, 0x88, 0xD7, 0xB1, 0x65, 0x42, 0x01, 0x86, 0xF4, 0x66, 0x3D
.byte 0x95, 0x41, 0xAF, 0xF1, 0x6F, 0xE3, 0x01, 0xF0, 0x99, 0xC9, 0x93, 0x24, 0x38, 0x62, 0x01, 0x6A
.byte 0x15, 0xA8, 0xDA, 0x10, 0xCF, 0xA9, 0xB1, 0xCD, 0x87, 0xAF, 0x24, 0xB0, 0xBA, 0xC7, 0x07, 0xDE
.byte 0xA4, 0xB4, 0x15, 0x8D, 0xF2, 0x0F, 0x46, 0x25, 0xFB, 0x9E, 0x4A, 0xEC, 0x5E, 0xB1, 0x37, 0x27
.byte 0x3D, 0x85, 0xE6, 0x1B, 0xE7, 0x71, 0x14, 0xC8, 0x2B, 0xF9, 0xC6, 0xDE, 0x35, 0x74, 0x00, 0xC0
.byte 0x1D, 0x67, 0x4F, 0xFE, 0x09, 0x40, 0x30, 0x3F, 0x27, 0x9E, 0xE2, 0xF0, 0x32, 0xC7, 0xA5, 0xA8
.byte 0xE8, 0x74, 0xEB, 0xAA, 0x26, 0xA2, 0x91, 0x6C, 0xF1, 0x8A, 0x94, 0x89, 0x41, 0x65, 0x59, 0x09
.byte 0xCB, 0x32, 0x11, 0x63, 0x97, 0x12, 0x32, 0x27, 0xA4, 0x74, 0x9A, 0xB2, 0x70, 0xAF, 0x65, 0xD5
.byte 0x97, 0x33, 0xF3, 0xE0, 0x64, 0xFC, 0x2F, 0xE5, 0x93, 0x71, 0xA0, 0xB5, 0x0C, 0x49, 0x42, 0x68
.byte 0xE5, 0xB5, 0xBA, 0xE5, 0x64, 0x65, 0xE7, 0x4F, 0x63, 0x92, 0x5A, 0xBB, 0xBE, 0xBC, 0xBD, 0x23
.byte 0x33, 0x45, 0xAE, 0xE9, 0x5E, 0x84, 0x1C, 0xE8, 0x33, 0x84, 0xA7, 0x70, 0xB0, 0x17, 0x14, 0x13
.byte 0x07, 0x5A, 0x4E, 0xB2, 0x24, 0x65, 0x11, 0xAC, 0xB9, 0x32, 0xB1, 0x9D, 0xA7, 0x8B, 0x19, 0x8B
.byte 0x0C, 0xF9, 0x76, 0xF8, 0xBA, 0x87, 0xAE, 0xB1, 0x5F, 0x63, 0x0C, 0xCF, 0x2B, 0x0F, 0x4F, 0xC8
.byte 0x36, 0x52, 0x7C, 0x02, 0x70, 0x82, 0x9B, 0xC2, 0x66, 0x59, 0xD7, 0xF1, 0x9F, 0xFF, 0x0D, 0x90
.byte 0xDD, 0x63, 0x4E, 0x48, 0x06, 0x9C, 0x64, 0x04, 0x07, 0x74, 0xDB, 0xEF, 0x66, 0xBA, 0x9C, 0xCE
.byte 0xE0, 0x95, 0x98, 0x14, 0xCB, 0x76, 0x97, 0x96, 0x91, 0xD0, 0xAC, 0x57, 0x02, 0x44, 0x57, 0x3B
.byte 0xC5, 0x5F, 0xDE, 0x1D, 0xB9, 0xA1, 0xE4, 0x2E, 0x89, 0xE6, 0xC7, 0xF7, 0x32, 0xE6, 0xCC, 0xF4
.byte 0xD9, 0xE3, 0xA0, 0x2F, 0x9D, 0x43, 0x40, 0xBB, 0xC9, 0x2B, 0xB6, 0x7B, 0x14, 0xCE, 0xDA, 0x1F
.byte 0x4E, 0x92, 0x79, 0xC3, 0x31, 0xBA, 0xFE, 0x03, 0xA5, 0xB1, 0x2C, 0x12, 0x46, 0xAD, 0xD6, 0x8E
.byte 0x5F, 0xC7, 0x3B, 0xA3, 0x3B, 0x34, 0xF8, 0x48, 0x05, 0xC4, 0x26, 0x0C, 0x02, 0x59, 0xA4, 0x57
.byte 0x6A, 0x6A, 0x17, 0x8B, 0xB3, 0x56, 0xA8, 0xE0, 0x89, 0x91, 0x0D, 0x77, 0x42, 0x6D, 0xDD, 0x7C
.byte 0x16, 0x90, 0xB5, 0xC7, 0xDD, 0xD9, 0x4B, 0xDD, 0xA5, 0xBF, 0xD4, 0xC3, 0xDF, 0xE8, 0xE9, 0x85
.byte 0x70, 0x1B, 0x5A, 0xD2, 0x6D, 0x2B, 0x00, 0xA8, 0xC6, 0x10, 0x16, 0x62, 0xAF, 0xCE, 0x27, 0x24
.byte 0x0C, 0x58, 0x04, 0xFA, 0xA5, 0x0D, 0xEA, 0xA3, 0x6E, 0x05, 0x3E, 0x64, 0xA7, 0xC8, 0x05, 0xD3
.byte 0x23, 0xA2, 0x8C, 0xFB, 0x76, 0x36, 0x4C, 0xC8, 0x57, 0x7B, 0x9B, 0x1A, 0xFC, 0xC1, 0x26, 0x74
.byte 0xB6, 0xFF, 0xC6, 0xA4, 0x9F, 0xF2, 0xB0, 0x4A, 0x91, 0x4A, 0x8C, 0xB6, 0x3F, 0x8B, 0x7E, 0xF3
.byte 0xAB, 0xC3, 0x9F, 0x72, 0xCC, 0xBE, 0xFD, 0x34, 0xA1, 0xE8, 0x97, 0xEB, 0x81, 0x7D, 0x73, 0xE3
.byte 0xF0, 0x2E, 0x40, 0x33, 0xBB, 0xF0, 0xA0, 0x0A, 0xA4, 0x08, 0x8E, 0x8B, 0x72, 0x0F, 0xFE, 0x20
.byte 0x99, 0x0C, 0x2C, 0xA9, 0x55, 0x50, 0xA7, 0x69, 0x6D, 0x38, 0xAD, 0x2A, 0x7F, 0x81, 0xCD, 0x6F
.byte 0x01, 0x56, 0x60, 0x20, 0xD3, 0xBB, 0xE4, 0xA4, 0xA6, 0x83, 0xBB, 0xBC, 0xF5, 0x77, 0x5C, 0x1C
.byte 0xE7, 0xD2, 0x74, 0x1B, 0xDE, 0xC2, 0x0A, 0x6A, 0xEF, 0x11, 0x2A, 0x36, 0x1D, 0x97, 0x1E, 0x9E
.byte 0x94, 0xB0, 0xBB, 0xEA, 0xAB, 0x4C, 0xCF, 0x60, 0xFF, 0xC5, 0x34, 0x2B, 0x63, 0x2E, 0x94, 0x32
.byte 0xF5, 0x30, 0x61, 0x4D, 0x1E, 0x32, 0x0B, 0xC5, 0xC2, 0xE1, 0x00, 0x72, 0x6D, 0xCD, 0x76, 0x7E
.byte 0xBF, 0x3D, 0x8F, 0x17, 0xEC, 0xE4, 0xDB, 0x0F, 0x7D, 0xA1, 0xBF, 0xC1, 0x41, 0xE8, 0xCA, 0x33
.byte 0x8D, 0x0D, 0x85, 0xCA, 0xB4, 0x06, 0xBB, 0x8D, 0xEA, 0xE0, 0xCC, 0x4E, 0x65, 0x7B, 0x0D, 0xA6
.byte 0x00, 0xC4, 0xC1, 0x38, 0x27, 0x0E, 0xAB, 0x08, 0x58, 0xB2, 0xCC, 0x6F, 0xFB, 0xA2, 0x4B, 0x7A
.byte 0xDF, 0x14, 0x19, 0x24, 0x24, 0xEB, 0x4F, 0x5F, 0xD0, 0x0B, 0xD0, 0x3D, 0xE5, 0x41, 0x44, 0x35
.byte 0x3A, 0xD8, 0xDF, 0xE3, 0xD8, 0x9B, 0x0A, 0x2C, 0x2F, 0x5B, 0x73, 0x2F, 0xE4, 0x9F, 0x8B, 0xE9
/*
* Coroutine switching test
*
* There are two coroutines in this test. The main coroutine calculates
* CRC32 of the 1024-byte data block. The secondary coroutine simulates
* a linear-feedback shift register (LFSR) with a polynom 1+x^6+x^7.
* It is invoked by the timer interrupt.
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
// Set up secondary routine (invoked by timer)
mov r200, 127 // initial value
lc r201, 250 // counter (number of LFSR iterations)
mov r204, 0 // result
lc r210, 0x10000008 // secondary routine output pointer
lc iv0, timer_handler
mov cr, 1 // enable interrupt 0
sw r104, 100
lc r0, 0xFFFFFFFF
sw r103, r0 // activate timer, unlimited pulses
// Main routine
lc r16, 0x10000004 // output pointer
lc r17, 0xFFFFFFFF // initial CRC value
lc r18, 0xEDB88320 // polynom
lc r19, data // input pointer
lc r20, 256 // data block size in words
lc r32, word_loop
lc r33, bit_loop
lc r34, dont_xor
mov r64, 0 // word counter
word_loop:
lw r0, r19
mov r65, 0 // bit counter
bit_loop:
and r1, r0, 1
and r2, r17, 1
sru r17, r17, 1
xor r3, r1, r2
cjmpe r34, r3, 0 // dont_xor
xor r17, r17, r18
dont_xor:
sru r0, r0, 1
add r65, r65, 1
cjmpul r33, r65, 32 // bit_loop
sw r16, r17
add r19, r19, 4
add r64, r64, 1
cjmpul r32, r64, r20 // word_loop
not r17, r17
sw r16, r17
// Check main routine result
lc r0, 0x501860E6
cjmpne r102, r0, r17
// Wait until secondary routine finishes its job
lc r0, wait_secondary
wait_secondary:
cjmpe r0, r204, 0
// Check secondary routine result
cjmpne r102, r204, 0x57
sw r103, 0 // deactivate timer
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
 
timer_handler:
sru r202, r200, 5
sru r203, r200, 6
xor r202, r202, r203
and r202, r202, 1
sl r200, r200, 1
or r200, r200, r202
and r200, r200, 0x7f
sub r201, r201, 1
cjmpug irp, r201, 0 // exit interrupt handler if r201>0
mov r204, r200
sw r210, r204
mov cr, 0 // disable further interrupts
iret
.align
data:
.byte 0x00, 0x90, 0x31, 0xCF, 0x95, 0x7A, 0x59, 0xE5, 0xD2, 0xBF, 0x2C, 0xDB, 0xB5, 0x83, 0x4D, 0x03
.byte 0x17, 0x5D, 0x25, 0x2A, 0xFD, 0x72, 0x1E, 0x01, 0x02, 0x60, 0x88, 0x92, 0x9A, 0x9B, 0x2A, 0xA9
.byte 0x73, 0x5A, 0x0E, 0x9B, 0xC8, 0xCD, 0x85, 0x4D, 0xE0, 0xBA, 0xF4, 0xEC, 0x8A, 0x24, 0x76, 0x3C
.byte 0xDC, 0x35, 0xC7, 0xD7, 0xFF, 0xFF, 0x9C, 0x64, 0x44, 0x4C, 0xD7, 0x06, 0x60, 0x17, 0xAD, 0x0E
.byte 0x02, 0xEB, 0x46, 0x45, 0x96, 0xB0, 0xD6, 0xB9, 0x7C, 0x34, 0xBE, 0x77, 0x75, 0xF2, 0xBE, 0x1B
.byte 0x99, 0x62, 0xBC, 0x9B, 0x92, 0x5C, 0x26, 0x39, 0x6C, 0xCD, 0x84, 0xFD, 0xC0, 0x58, 0x2B, 0xA8
.byte 0x7D, 0x10, 0xB3, 0x81, 0x25, 0xF3, 0x24, 0xE7, 0xB1, 0x4D, 0x6D, 0x12, 0xF7, 0xAE, 0x27, 0xE0
.byte 0xD2, 0x95, 0x30, 0x2D, 0xD1, 0x79, 0x27, 0x81, 0xBB, 0x67, 0x47, 0x91, 0xAE, 0xC1, 0xB8, 0x79
.byte 0x1F, 0x5E, 0xD5, 0x08, 0x84, 0xA9, 0x6D, 0x1A, 0xF3, 0xEB, 0x8C, 0x58, 0x78, 0x5F, 0xD8, 0x51
.byte 0x74, 0x45, 0xFB, 0x4C, 0xBD, 0x91, 0x32, 0xC2, 0xD6, 0x65, 0x80, 0xE3, 0x07, 0xFE, 0x92, 0x0C
.byte 0x88, 0x31, 0xD7, 0xA0, 0xA8, 0x32, 0xD7, 0x1F, 0x1C, 0xBE, 0x50, 0xF0, 0x49, 0x56, 0x23, 0xBB
.byte 0xD5, 0xB5, 0x99, 0xBF, 0x40, 0x24, 0x00, 0x0F, 0xCE, 0xDA, 0x35, 0x1D, 0x8D, 0x03, 0x1D, 0x74
.byte 0xC0, 0xAF, 0x8B, 0x12, 0x6F, 0x33, 0xB2, 0x4A, 0x6F, 0x3B, 0x93, 0x88, 0xA0, 0x29, 0x81, 0xF6
.byte 0xB2, 0xEC, 0x30, 0x56, 0x2D, 0xFE, 0x75, 0xFF, 0x18, 0xA0, 0x18, 0x70, 0xEE, 0x0C, 0xE5, 0x4A
.byte 0x3A, 0xC4, 0x69, 0x33, 0xA0, 0x9A, 0x73, 0x77, 0x99, 0xA2, 0xDA, 0xD4, 0x9F, 0xB8, 0x90, 0x60
.byte 0x2F, 0xBC, 0x8E, 0xE7, 0x3E, 0x30, 0x9A, 0xB2, 0x95, 0x59, 0x7E, 0x14, 0xBD, 0x9C, 0x9E, 0xB0
.byte 0xCD, 0x26, 0x93, 0xDE, 0xE9, 0x9D, 0xBA, 0x0B, 0xAA, 0xF9, 0x50, 0x91, 0x4E, 0x2C, 0x1B, 0xDE
.byte 0xD9, 0xBE, 0x27, 0x53, 0x14, 0x13, 0xA4, 0xD1, 0x8B, 0x72, 0x68, 0x4C, 0x77, 0x80, 0x27, 0x52
.byte 0xBC, 0x50, 0xD3, 0xF5, 0xDF, 0xB9, 0x4C, 0xF1, 0x20, 0x10, 0xC8, 0x86, 0x9C, 0xF4, 0x12, 0xE0
.byte 0xA7, 0x52, 0x1A, 0x81, 0x3A, 0x4A, 0xEB, 0x8D, 0xA9, 0x1D, 0x7E, 0x61, 0x7F, 0xCB, 0x82, 0x61
.byte 0xB0, 0x88, 0x9B, 0x65, 0x01, 0xB5, 0x19, 0x9F, 0xDC, 0x7D, 0xBF, 0x7F, 0x61, 0xC9, 0x8D, 0x5B
.byte 0xF4, 0xA1, 0x2D, 0x5F, 0x21, 0xBE, 0xF3, 0x9C, 0x07, 0x54, 0x0E, 0xA3, 0x21, 0xD8, 0xDD, 0x98
.byte 0xB8, 0xDA, 0x03, 0x20, 0xB5, 0x9D, 0x37, 0x10, 0x2B, 0x9F, 0x57, 0x51, 0x5E, 0xA9, 0xCD, 0xCE
.byte 0x86, 0x9C, 0xCC, 0xE6, 0x25, 0xA1, 0x67, 0x40, 0x22, 0xDA, 0x10, 0x6D, 0x92, 0x4D, 0x8C, 0x39
.byte 0x4F, 0x1C, 0xCE, 0x22, 0x48, 0xC9, 0xE5, 0xCA, 0xBE, 0x9D, 0x5C, 0xDB, 0x3A, 0xDD, 0x3A, 0x3F
.byte 0x8A, 0xFC, 0x0D, 0x14, 0x86, 0x6D, 0x18, 0x42, 0xE4, 0x3B, 0x25, 0x20, 0xEE, 0x14, 0x0C, 0x0F
.byte 0x56, 0xEA, 0x66, 0x6E, 0xF2, 0xD6, 0x88, 0xD7, 0xB1, 0x65, 0x42, 0x01, 0x86, 0xF4, 0x66, 0x3D
.byte 0x95, 0x41, 0xAF, 0xF1, 0x6F, 0xE3, 0x01, 0xF0, 0x99, 0xC9, 0x93, 0x24, 0x38, 0x62, 0x01, 0x6A
.byte 0x15, 0xA8, 0xDA, 0x10, 0xCF, 0xA9, 0xB1, 0xCD, 0x87, 0xAF, 0x24, 0xB0, 0xBA, 0xC7, 0x07, 0xDE
.byte 0xA4, 0xB4, 0x15, 0x8D, 0xF2, 0x0F, 0x46, 0x25, 0xFB, 0x9E, 0x4A, 0xEC, 0x5E, 0xB1, 0x37, 0x27
.byte 0x3D, 0x85, 0xE6, 0x1B, 0xE7, 0x71, 0x14, 0xC8, 0x2B, 0xF9, 0xC6, 0xDE, 0x35, 0x74, 0x00, 0xC0
.byte 0x1D, 0x67, 0x4F, 0xFE, 0x09, 0x40, 0x30, 0x3F, 0x27, 0x9E, 0xE2, 0xF0, 0x32, 0xC7, 0xA5, 0xA8
.byte 0xE8, 0x74, 0xEB, 0xAA, 0x26, 0xA2, 0x91, 0x6C, 0xF1, 0x8A, 0x94, 0x89, 0x41, 0x65, 0x59, 0x09
.byte 0xCB, 0x32, 0x11, 0x63, 0x97, 0x12, 0x32, 0x27, 0xA4, 0x74, 0x9A, 0xB2, 0x70, 0xAF, 0x65, 0xD5
.byte 0x97, 0x33, 0xF3, 0xE0, 0x64, 0xFC, 0x2F, 0xE5, 0x93, 0x71, 0xA0, 0xB5, 0x0C, 0x49, 0x42, 0x68
.byte 0xE5, 0xB5, 0xBA, 0xE5, 0x64, 0x65, 0xE7, 0x4F, 0x63, 0x92, 0x5A, 0xBB, 0xBE, 0xBC, 0xBD, 0x23
.byte 0x33, 0x45, 0xAE, 0xE9, 0x5E, 0x84, 0x1C, 0xE8, 0x33, 0x84, 0xA7, 0x70, 0xB0, 0x17, 0x14, 0x13
.byte 0x07, 0x5A, 0x4E, 0xB2, 0x24, 0x65, 0x11, 0xAC, 0xB9, 0x32, 0xB1, 0x9D, 0xA7, 0x8B, 0x19, 0x8B
.byte 0x0C, 0xF9, 0x76, 0xF8, 0xBA, 0x87, 0xAE, 0xB1, 0x5F, 0x63, 0x0C, 0xCF, 0x2B, 0x0F, 0x4F, 0xC8
.byte 0x36, 0x52, 0x7C, 0x02, 0x70, 0x82, 0x9B, 0xC2, 0x66, 0x59, 0xD7, 0xF1, 0x9F, 0xFF, 0x0D, 0x90
.byte 0xDD, 0x63, 0x4E, 0x48, 0x06, 0x9C, 0x64, 0x04, 0x07, 0x74, 0xDB, 0xEF, 0x66, 0xBA, 0x9C, 0xCE
.byte 0xE0, 0x95, 0x98, 0x14, 0xCB, 0x76, 0x97, 0x96, 0x91, 0xD0, 0xAC, 0x57, 0x02, 0x44, 0x57, 0x3B
.byte 0xC5, 0x5F, 0xDE, 0x1D, 0xB9, 0xA1, 0xE4, 0x2E, 0x89, 0xE6, 0xC7, 0xF7, 0x32, 0xE6, 0xCC, 0xF4
.byte 0xD9, 0xE3, 0xA0, 0x2F, 0x9D, 0x43, 0x40, 0xBB, 0xC9, 0x2B, 0xB6, 0x7B, 0x14, 0xCE, 0xDA, 0x1F
.byte 0x4E, 0x92, 0x79, 0xC3, 0x31, 0xBA, 0xFE, 0x03, 0xA5, 0xB1, 0x2C, 0x12, 0x46, 0xAD, 0xD6, 0x8E
.byte 0x5F, 0xC7, 0x3B, 0xA3, 0x3B, 0x34, 0xF8, 0x48, 0x05, 0xC4, 0x26, 0x0C, 0x02, 0x59, 0xA4, 0x57
.byte 0x6A, 0x6A, 0x17, 0x8B, 0xB3, 0x56, 0xA8, 0xE0, 0x89, 0x91, 0x0D, 0x77, 0x42, 0x6D, 0xDD, 0x7C
.byte 0x16, 0x90, 0xB5, 0xC7, 0xDD, 0xD9, 0x4B, 0xDD, 0xA5, 0xBF, 0xD4, 0xC3, 0xDF, 0xE8, 0xE9, 0x85
.byte 0x70, 0x1B, 0x5A, 0xD2, 0x6D, 0x2B, 0x00, 0xA8, 0xC6, 0x10, 0x16, 0x62, 0xAF, 0xCE, 0x27, 0x24
.byte 0x0C, 0x58, 0x04, 0xFA, 0xA5, 0x0D, 0xEA, 0xA3, 0x6E, 0x05, 0x3E, 0x64, 0xA7, 0xC8, 0x05, 0xD3
.byte 0x23, 0xA2, 0x8C, 0xFB, 0x76, 0x36, 0x4C, 0xC8, 0x57, 0x7B, 0x9B, 0x1A, 0xFC, 0xC1, 0x26, 0x74
.byte 0xB6, 0xFF, 0xC6, 0xA4, 0x9F, 0xF2, 0xB0, 0x4A, 0x91, 0x4A, 0x8C, 0xB6, 0x3F, 0x8B, 0x7E, 0xF3
.byte 0xAB, 0xC3, 0x9F, 0x72, 0xCC, 0xBE, 0xFD, 0x34, 0xA1, 0xE8, 0x97, 0xEB, 0x81, 0x7D, 0x73, 0xE3
.byte 0xF0, 0x2E, 0x40, 0x33, 0xBB, 0xF0, 0xA0, 0x0A, 0xA4, 0x08, 0x8E, 0x8B, 0x72, 0x0F, 0xFE, 0x20
.byte 0x99, 0x0C, 0x2C, 0xA9, 0x55, 0x50, 0xA7, 0x69, 0x6D, 0x38, 0xAD, 0x2A, 0x7F, 0x81, 0xCD, 0x6F
.byte 0x01, 0x56, 0x60, 0x20, 0xD3, 0xBB, 0xE4, 0xA4, 0xA6, 0x83, 0xBB, 0xBC, 0xF5, 0x77, 0x5C, 0x1C
.byte 0xE7, 0xD2, 0x74, 0x1B, 0xDE, 0xC2, 0x0A, 0x6A, 0xEF, 0x11, 0x2A, 0x36, 0x1D, 0x97, 0x1E, 0x9E
.byte 0x94, 0xB0, 0xBB, 0xEA, 0xAB, 0x4C, 0xCF, 0x60, 0xFF, 0xC5, 0x34, 0x2B, 0x63, 0x2E, 0x94, 0x32
.byte 0xF5, 0x30, 0x61, 0x4D, 0x1E, 0x32, 0x0B, 0xC5, 0xC2, 0xE1, 0x00, 0x72, 0x6D, 0xCD, 0x76, 0x7E
.byte 0xBF, 0x3D, 0x8F, 0x17, 0xEC, 0xE4, 0xDB, 0x0F, 0x7D, 0xA1, 0xBF, 0xC1, 0x41, 0xE8, 0xCA, 0x33
.byte 0x8D, 0x0D, 0x85, 0xCA, 0xB4, 0x06, 0xBB, 0x8D, 0xEA, 0xE0, 0xCC, 0x4E, 0x65, 0x7B, 0x0D, 0xA6
.byte 0x00, 0xC4, 0xC1, 0x38, 0x27, 0x0E, 0xAB, 0x08, 0x58, 0xB2, 0xCC, 0x6F, 0xFB, 0xA2, 0x4B, 0x7A
.byte 0xDF, 0x14, 0x19, 0x24, 0x24, 0xEB, 0x4F, 0x5F, 0xD0, 0x0B, 0xD0, 0x3D, 0xE5, 0x41, 0x44, 0x35
.byte 0x3A, 0xD8, 0xDF, 0xE3, 0xD8, 0x9B, 0x0A, 0x2C, 0x2F, 0x5B, 0x73, 0x2F, 0xE4, 0x9F, 0x8B, 0xE9
/firmware/test012.asm
1,373 → 1,373
/*
* Test multiplication
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x10000004
// Check multiplication table
 
lc r32, op1
lc r33, op2
lc r34, product
lc r35, loop
mov r10, 100
loop:
lw r0, r32
lw r1, r33
mul r3, r0, r1
lw r2, r34
cjmpne r102, r2, r3 // failure
add r32, r32, 4
add r33, r33, 4
add r34, r34, 4
sub r10, r10, 1
cjmpug r35, r10, 0 // loop
// Simulate a linear congruent random number generator
// as described in ISO/IEC 9899:1999 ("C99" standard)
 
mov r64, 1 // initial value
lc r65, 1103515245 // multiplier
lc r66, 12345 // addition constant
lc r67, 32767 // mask
mov r10, 100
lc r32, rand
lc r35, rnd_loop
rnd_loop:
call r32 // rand
sw r103, r0
sub r10, r10, 1
cjmpug r35, r10, 0 // rnd_loop
lc r1, 26521
cjmpne r102, r0, r1 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
 
rand:
mul r64, r64, r65
add r64, r64, r66
sru r0, r64, 16
and r0, r0, r67
ret
 
op1:
.word 5
.word 1021028019
.word 3360494259
.word 4241216605
.word 3998259744
.word 4061417389
.word 2643534582
.word 3313401900
.word 2127959231
.word 517066081
.word 971560706
.word 2765397972
.word 1972360008
.word 5267214
.word 3667030040
.word 3641602966
.word 297473786
.word 3637724660
.word 3268423030
.word 2775202737
.word 2509905173
.word 3885678420
.word 820072030
.word 1177172069
.word 1047341530
.word 1826819693
.word 1694831631
.word 4270696691
.word 1299413127
.word 2817552511
.word 2675818186
.word 231984537
.word 65817694
.word 3640600522
.word 545754317
.word 2973624217
.word 2669208735
.word 1079210895
.word 660979290
.word 738800690
.word 1631093128
.word 489263629
.word 4116157872
.word 3178886821
.word 2324324955
.word 2982397572
.word 3365621776
.word 2764926001
.word 1498466135
.word 1012944436
.word -246837166
.word 470638116
.word 2103051039
.word 176753939
.word -164476654
.word -1221540757
.word 43633328
.word -859182414
.word 1230499715
.word -266475918
.word 1949507090
.word -856415694
.word 737657061
.word 118818171
.word 359218821
.word 1246427092
.word -615317895
.word 1029267653
.word 628714057
.word -2029278762
.word -1700206210
.word -785893232
.word -492445025
.word -1032292742
.word -1506164940
.word 63097629
.word -1909659707
.word 1003528447
.word 1095156443
.word 325606314
.word 1750055165
.word 861103782
.word -1441910348
.word 1113139065
.word -1337158265
.word -381613907
.word 567364862
.word -808095798
.word -1503281503
.word -1646541226
.word -405777159
.word -98798373
.word -1948683123
.word -1889476128
.word 994740197
.word 57636334
.word -1628834166
.word -15689588
.word 1568614403
.word 722317890
 
op2:
.word 3
.word 2570980487
.word 2794175299
.word 994440598
.word 4248205376
.word 3496362052
.word 3659500513
.word 2162808217
.word 1720638509
.word 1914084509
.word 3385545516
.word 3476389465
.word 706599398
.word 3196936660
.word 2983089252
.word 1751592726
.word 2284105389
.word 4111191592
.word 3563638217
.word 2361468945
.word 3236010945
.word 1439769561
.word 1910111900
.word 2038606217
.word 311877730
.word 538878248
.word 3378587675
.word 1911288510
.word 3196239568
.word 2503116372
.word 457280137
.word 3023717616
.word 98988876
.word 4098692253
.word 2797102115
.word 2159140448
.word 637551125
.word 2125433411
.word 2902980138
.word 395247949
.word 1645373547
.word 1922640262
.word 1835827423
.word 3088444407
.word 4150011791
.word 273297575
.word 673792897
.word 2743197342
.word 656195007
.word 2550324965
.word -337003535
.word -565725434
.word 522532873
.word 850320156
.word -599163490
.word 580991794
.word 1235055289
.word -697843885
.word -1888878751
.word 2001358724
.word -705426274
.word 764466127
.word 1149731192
.word 528626491
.word 74073848
.word 1986549712
.word 1021657893
.word 1502226327
.word 339763464
.word -248542057
.word -1245542745
.word 1721855193
.word 1203018508
.word -551112349
.word -245462721
.word -2079899329
.word -603441594
.word 2123105909
.word 821726251
.word -167975413
.word 343634678
.word 279038731
.word -1328164947
.word -121529220
.word 760122714
.word -710590105
.word -1288727804
.word -829054509
.word 1774242228
.word 198747848
.word 2017990513
.word -1246218417
.word 135357763
.word -193250194
.word 1080138546
.word -278225361
.word 1216454983
.word -808631398
.word 1236885385
.word -1142156106
 
product:
.word 15
.word 3187625061
.word 4060456409
.word 3720114046
.word 2133166080
.word 2956880372
.word 39144502
.word 4048238156
.word 3781675411
.word 2552762493
.word 2186320472
.word 2004478132
.word 1215814320
.word 1967719832
.word 961259872
.word 3218110692
.word 808743666
.word 1758021152
.word 3653971878
.word 1641193153
.word 1749066709
.word 2447944244
.word 1085998408
.word 3424443149
.word 1143260532
.word 542297608
.word 3545920917
.word 820648538
.word 131342256
.word 3650446252
.word 3798859290
.word 1641505648
.word 3270043112
.word 2203660002
.word 2262848519
.word 3335948128
.word 301711115
.word 853759085
.word 1108457156
.word 3991332106
.word 3268240344
.word 4293625806
.word 2556650576
.word 2577362995
.word 2650590677
.word 1310146588
.word 247957520
.word 2454471742
.word 1425274089
.word 39783556
.word -2091990222
.word -1969753896
.word 1297343511
.word -32067820
.word -824646884
.word -1038744090
.word -615130832
.word 1160766902
.word -878690909
.word -1535377208
.word -1071814884
.word -139010962
.word 18403416
.word 2137375833
.word 2082402008
.word 1027762240
.word 1775596157
.word 1957173043
.word 1934687048
.word -1391708870
.word 1441023282
.word 897888784
.word -2134317964
.word 1520184110
.word -123674164
.word -464692957
.word -481104418
.word -946631029
.word 55606985
.word -2060538802
.word 1653304606
.word 1163987746
.word -2138299740
.word 1903549084
.word 1936321654
.word -455120229
.word 1931283960
.word 617295230
.word -470388172
.word -522275024
.word -1465917207
.word 541793429
.word -1975377433
.word 1462865472
.word 1922773434
.word 1925941938
.word 1115302470
.word 604268600
.word -32471397
.word 948036332
/*
* Test multiplication
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x10000004
// Check multiplication table
 
lc r32, op1
lc r33, op2
lc r34, product
lc r35, loop
mov r10, 100
loop:
lw r0, r32
lw r1, r33
mul r3, r0, r1
lw r2, r34
cjmpne r102, r2, r3 // failure
add r32, r32, 4
add r33, r33, 4
add r34, r34, 4
sub r10, r10, 1
cjmpug r35, r10, 0 // loop
// Simulate a linear congruent random number generator
// as described in ISO/IEC 9899:1999 ("C99" standard)
 
mov r64, 1 // initial value
lc r65, 1103515245 // multiplier
lc r66, 12345 // addition constant
lc r67, 32767 // mask
mov r10, 100
lc r32, rand
lc r35, rnd_loop
rnd_loop:
call r32 // rand
sw r103, r0
sub r10, r10, 1
cjmpug r35, r10, 0 // rnd_loop
lc r1, 26521
cjmpne r102, r0, r1 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
 
rand:
mul r64, r64, r65
add r64, r64, r66
sru r0, r64, 16
and r0, r0, r67
ret
 
op1:
.word 5
.word 1021028019
.word 3360494259
.word 4241216605
.word 3998259744
.word 4061417389
.word 2643534582
.word 3313401900
.word 2127959231
.word 517066081
.word 971560706
.word 2765397972
.word 1972360008
.word 5267214
.word 3667030040
.word 3641602966
.word 297473786
.word 3637724660
.word 3268423030
.word 2775202737
.word 2509905173
.word 3885678420
.word 820072030
.word 1177172069
.word 1047341530
.word 1826819693
.word 1694831631
.word 4270696691
.word 1299413127
.word 2817552511
.word 2675818186
.word 231984537
.word 65817694
.word 3640600522
.word 545754317
.word 2973624217
.word 2669208735
.word 1079210895
.word 660979290
.word 738800690
.word 1631093128
.word 489263629
.word 4116157872
.word 3178886821
.word 2324324955
.word 2982397572
.word 3365621776
.word 2764926001
.word 1498466135
.word 1012944436
.word -246837166
.word 470638116
.word 2103051039
.word 176753939
.word -164476654
.word -1221540757
.word 43633328
.word -859182414
.word 1230499715
.word -266475918
.word 1949507090
.word -856415694
.word 737657061
.word 118818171
.word 359218821
.word 1246427092
.word -615317895
.word 1029267653
.word 628714057
.word -2029278762
.word -1700206210
.word -785893232
.word -492445025
.word -1032292742
.word -1506164940
.word 63097629
.word -1909659707
.word 1003528447
.word 1095156443
.word 325606314
.word 1750055165
.word 861103782
.word -1441910348
.word 1113139065
.word -1337158265
.word -381613907
.word 567364862
.word -808095798
.word -1503281503
.word -1646541226
.word -405777159
.word -98798373
.word -1948683123
.word -1889476128
.word 994740197
.word 57636334
.word -1628834166
.word -15689588
.word 1568614403
.word 722317890
 
op2:
.word 3
.word 2570980487
.word 2794175299
.word 994440598
.word 4248205376
.word 3496362052
.word 3659500513
.word 2162808217
.word 1720638509
.word 1914084509
.word 3385545516
.word 3476389465
.word 706599398
.word 3196936660
.word 2983089252
.word 1751592726
.word 2284105389
.word 4111191592
.word 3563638217
.word 2361468945
.word 3236010945
.word 1439769561
.word 1910111900
.word 2038606217
.word 311877730
.word 538878248
.word 3378587675
.word 1911288510
.word 3196239568
.word 2503116372
.word 457280137
.word 3023717616
.word 98988876
.word 4098692253
.word 2797102115
.word 2159140448
.word 637551125
.word 2125433411
.word 2902980138
.word 395247949
.word 1645373547
.word 1922640262
.word 1835827423
.word 3088444407
.word 4150011791
.word 273297575
.word 673792897
.word 2743197342
.word 656195007
.word 2550324965
.word -337003535
.word -565725434
.word 522532873
.word 850320156
.word -599163490
.word 580991794
.word 1235055289
.word -697843885
.word -1888878751
.word 2001358724
.word -705426274
.word 764466127
.word 1149731192
.word 528626491
.word 74073848
.word 1986549712
.word 1021657893
.word 1502226327
.word 339763464
.word -248542057
.word -1245542745
.word 1721855193
.word 1203018508
.word -551112349
.word -245462721
.word -2079899329
.word -603441594
.word 2123105909
.word 821726251
.word -167975413
.word 343634678
.word 279038731
.word -1328164947
.word -121529220
.word 760122714
.word -710590105
.word -1288727804
.word -829054509
.word 1774242228
.word 198747848
.word 2017990513
.word -1246218417
.word 135357763
.word -193250194
.word 1080138546
.word -278225361
.word 1216454983
.word -808631398
.word 1236885385
.word -1142156106
 
product:
.word 15
.word 3187625061
.word 4060456409
.word 3720114046
.word 2133166080
.word 2956880372
.word 39144502
.word 4048238156
.word 3781675411
.word 2552762493
.word 2186320472
.word 2004478132
.word 1215814320
.word 1967719832
.word 961259872
.word 3218110692
.word 808743666
.word 1758021152
.word 3653971878
.word 1641193153
.word 1749066709
.word 2447944244
.word 1085998408
.word 3424443149
.word 1143260532
.word 542297608
.word 3545920917
.word 820648538
.word 131342256
.word 3650446252
.word 3798859290
.word 1641505648
.word 3270043112
.word 2203660002
.word 2262848519
.word 3335948128
.word 301711115
.word 853759085
.word 1108457156
.word 3991332106
.word 3268240344
.word 4293625806
.word 2556650576
.word 2577362995
.word 2650590677
.word 1310146588
.word 247957520
.word 2454471742
.word 1425274089
.word 39783556
.word -2091990222
.word -1969753896
.word 1297343511
.word -32067820
.word -824646884
.word -1038744090
.word -615130832
.word 1160766902
.word -878690909
.word -1535377208
.word -1071814884
.word -139010962
.word 18403416
.word 2137375833
.word 2082402008
.word 1027762240
.word 1775596157
.word 1957173043
.word 1934687048
.word -1391708870
.word 1441023282
.word 897888784
.word -2134317964
.word 1520184110
.word -123674164
.word -464692957
.word -481104418
.word -946631029
.word 55606985
.word -2060538802
.word 1653304606
.word 1163987746
.word -2138299740
.word 1903549084
.word 1936321654
.word -455120229
.word 1931283960
.word 617295230
.word -470388172
.word -522275024
.word -1465917207
.word 541793429
.word -1975377433
.word 1462865472
.word 1922773434
.word 1925941938
.word 1115302470
.word 604268600
.word -32471397
.word 948036332
/firmware/test013.asm
1,935 → 1,935
/*
* Test division (divu, divs, modu, mods)
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x10000004
// Test unsigned division
lc r32, op1
lc r33, op2
lc r34, quotient
lc r35, remainder
lc r36, cnt_loop
lc r10, 100 // counter
cnt_loop:
lw r0, r32
lw r1, r33
divu r2, r0, r1
modu r3, r0, r1
lw r4, r34
lw r5, r35
cjmpne r102, r2, r4 // failure
cjmpne r102, r3, r5 // failure
mul r6, r2, r1
add r6, r6, r3
cjmpne r102, r6, r0 // failure
add r32, r32, 4
add r33, r33, 4
add r34, r34, 4
add r35, r35, 4
sub r10, r10, 1
cjmpug r36, r10, 0 // cnt_loop
sw r103, 1
 
// Test signed division
 
lc r32, op1_signed
lc r33, op2_signed
lc r34, quotient_signed
lc r35, remainder_signed
lc r36, cnt_loop2
lc r10, 100 // counter
cnt_loop2:
lw r0, r32
lw r1, r33
divs r2, r0, r1
mods r3, r0, r1
lw r4, r34
lw r5, r35
cjmpne r102, r2, r4 // failure
cjmpne r102, r3, r5 // failure
mul r6, r2, r1
add r6, r6, r3
cjmpne r102, r6, r0 // failure
add r32, r32, 4
add r33, r33, 4
add r34, r34, 4
add r35, r35, 4
sub r10, r10, 1
cjmpug r36, r10, 0 // cnt_loop2
sw r103, 2
// Random division/multiplication test
 
mov r64, 1 // initial PRBS value
lc r65, 1103515245 // PRBS multiplier
lc r66, 12345 // PRBS addition constant
lc r67, 32767 // PRBS mask
lc r68, 16384
lc r10, 1000
lc r32, rnd_loop
lc r33, rand
lc r34, rnd_cont
rnd_loop:
call r33 // rand
sub r1, r0, r68 // dividend in r1
call r33 // rand
sub r2, r0, r68 // divisor in r2
cjmpne r34, r2, 0 // rnd_cont
mov r2, 1
rnd_cont:
divs r3, r1, r2
mods r4, r1, r2
mul r5, r3, r2
add r5, r5, r4
cjmpne r102, r5, r1 // failure
sub r10, r10, 1
cjmpug r32, r10, 0 // rnd_loop
sw r103, 3
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
 
// Linear congruent pseudo-random number generator (as in ISO/IEC 9899:1999)
 
rand:
mul r64, r64, r65
add r64, r64, r66
sru r0, r64, 16
and r0, r0, r67
ret
 
op1:
.word 2227053353
.word 4059122064
.word 210189531
.word 1203176988
.word 2794175299
.word 1562322232
.word 219364165
.word 1352278066
.word 4130490642
.word 1156715599
.word 993179440
.word 529260957
.word 1235055289
.word 2994792917
.word 348116583
.word 1475314534
.word 517066081
.word 2230328806
.word 1395407336
.word 4094467700
.word 3476389465
.word 1210945747
.word 3236243997
.word 1348406852
.word 118818171
.word 1692045936
.word 1190663529
.word 1731139289
.word 1986549712
.word 2038965422
.word 1173634277
.word 1499514357
.word 3268423030
.word 136673642
.word 672245098
.word 797742983
.word 3236010945
.word 1421197958
.word 948983249
.word 3780009574
.word 3802522271
.word 2303076920
.word 2976105080
.word 2531287614
.word 4049504575
.word 488644257
.word 336561159
.word 753386953
.word 4270696691
.word 1966854304
.word 3201322355
.word 4203490113
.word 2503116372
.word 3405118694
.word 3103595329
.word 3553466644
.word 861103782
.word 1275325516
.word 3484264974
.word 1293196760
.word 4173438076
.word 2275850340
.word 3885575502
.word 1091087744
.word 2669208735
.word 69325132
.word 2319663187
.word 2510410703
.word 2902980138
.word 845791433
.word 3327530895
.word 948013067
.word 3889190137
.word 2250058130
.word 927988252
.word 1820385269
.word 135357763
.word 3770160619
.word 1650193531
.word 1250420215
.word 2982397572
.word 788754293
.word 1132578971
.word 2174830494
.word 2743197342
.word 1473236291
.word 671295260
.word 1615737929
.word 722317890
.word 1373795119
.word 3187744723
.word 353993505
.word 3691968907
.word 2452722797
.word 1784599952
.word 912987979
.word 2183033578
.word 2941180254
.word 3706025245
.word 2141225307
 
op2:
.word 225
.word 3018582459
.word 6462
.word 222
.word 799
.word 19412
.word 3676048009
.word 16622
.word 32158
.word 64
.word 8865
.word 2580197594
.word 3313401900
.word 1405929962
.word 214
.word 24905
.word 1914084509
.word 41372239
.word 203
.word 213
.word 50
.word 3866464211
.word 247
.word 2371998720
.word 528626491
.word 2243022420
.word 106
.word 21608
.word 250
.word 635130622
.word 22739
.word 61
.word 3563638217
.word 97
.word 2849410241
.word 241
.word 2594761086
.word 191
.word 40
.word 48
.word 6924
.word 2054783657
.word 702209830
.word 968832018
.word 1826819693
.word 17099
.word 25861
.word 142
.word 190
.word 3078
.word 130
.word 32560
.word 170
.word 2308931006
.word 26703
.word 13
.word 19211
.word 115
.word 667594965
.word 1495759348
.word 205
.word 19605
.word 61
.word 2772527081
.word 16917
.word 147
.word 175
.word 206
.word 16033
.word 2356
.word 7643
.word 97
.word 2017990513
.word 41
.word 13752
.word 109
.word 165
.word 225
.word 2698
.word 12859
.word 12455
.word 158
.word 4136249385
.word 3446419784
.word 140
.word 20679
.word 23935
.word 48162108
.word 5302
.word 126
.word 80
.word 741054488
.word 188
.word 116
.word 64
.word 177
.word 141
.word 16378
.word 3662043152
.word 19292
 
quotient:
.word 9898014
.word 1
.word 32527
.word 5419716
.word 3497090
.word 80482
.word 0
.word 81354
.word 128443
.word 18073681
.word 112033
.word 0
.word 0
.word 2
.word 1626713
.word 59237
.word 0
.word 53
.word 6873927
.word 19222853
.word 69527789
.word 0
.word 13102202
.word 0
.word 0
.word 0
.word 11232674
.word 80115
.word 7946198
.word 3
.word 51613
.word 24582202
.word 0
.word 1409006
.word 0
.word 3310136
.word 1
.word 7440827
.word 23724581
.word 78750199
.word 549179
.word 1
.word 4
.word 2
.word 2
.word 28577
.word 13014
.word 5305541
.word 22477351
.word 639003
.word 24625556
.word 129099
.word 14724213
.word 1
.word 116226
.word 273343588
.word 44823
.word 11089787
.word 5
.word 0
.word 20358234
.word 116085
.word 63697959
.word 0
.word 157782
.word 471599
.word 13255218
.word 12186459
.word 181062
.word 358994
.word 435369
.word 9773330
.word 1
.word 54879466
.word 67480
.word 16700782
.word 820350
.word 16756269
.word 611635
.word 97240
.word 239453
.word 4992115
.word 0
.word 0
.word 19594266
.word 71243
.word 28046
.word 33
.word 136234
.word 10903135
.word 39846809
.word 0
.word 19638132
.word 21144162
.word 27884374
.word 5158124
.word 15482507
.word 179581
.word 1
.word 110990
 
remainder:
.word 203
.word 1040539605
.word 57
.word 36
.word 389
.word 5648
.word 219364165
.word 11878
.word 20648
.word 15
.word 6895
.word 529260957
.word 1235055289
.word 182932993
.word 1
.word 17049
.word 517066081
.word 37600139
.word 155
.word 11
.word 15
.word 1210945747
.word 103
.word 1348406852
.word 118818171
.word 1692045936
.word 85
.word 14369
.word 212
.word 133573556
.word 6270
.word 35
.word 3268423030
.word 60
.word 672245098
.word 207
.word 641249859
.word 1
.word 9
.word 22
.word 6875
.word 248293263
.word 167265760
.word 593623578
.word 395865189
.word 6134
.word 6105
.word 131
.word 1
.word 3070
.word 75
.word 26673
.word 162
.word 1096187688
.word 12451
.word 0
.word 9129
.word 11
.word 146290149
.word 1293196760
.word 106
.word 3915
.word 3
.word 1091087744
.word 10641
.word 79
.word 37
.word 149
.word 13092
.word 1569
.word 5628
.word 57
.word 1871199624
.word 24
.word 3292
.word 31
.word 13
.word 94
.word 2301
.word 11055
.word 10457
.word 123
.word 1132578971
.word 2174830494
.word 102
.word 2294
.word 14250
.word 26388365
.word 5222
.word 109
.word 3
.word 353993505
.word 91
.word 5
.word 16
.word 31
.word 91
.word 2636
.word 43982093
.word 6227
 
op1_signed:
.word 1173464398
.word 644568570
.word 1413618866
.word 940280095
.word 1307051796
.word 69701148
.word 791353789
.word -1751134801
.word -540034563
.word -664201053
.word 859052625
.word 506263265
.word 1672805452
.word -940950084
.word 639564287
.word -320080770
.word -194326606
.word -1401122692
.word 1361841711
.word -1572666822
.word 223085807
.word -2143536785
.word -771364638
.word -392756254
.word -2075946315
.word -133598861
.word 869612982
.word 727395029
.word -1173738546
.word 1865699269
.word 1001660457
.word -1435705417
.word 313397375
.word 91734875
.word 55211040
.word -1298145437
.word -1587928274
.word 120185203
.word 1253220522
.word 664380448
.word 659766337
.word -1867423126
.word 211715071
.word 1172375319
.word 1010876232
.word 1866163921
.word 1337698510
.word -1489886717
.word -844206754
.word 1252556476
.word 1062583479
.word -2028701144
.word -925730358
.word 63629404
.word 2084388372
.word 1185701000
.word 344972780
.word 1506745295
.word -1310164994
.word 785548626
.word -960828075
.word -788757195
.word 1742449807
.word 1952581789
.word -1868879050
.word -727870971
.word 457544035
.word -2083100074
.word 2092326142
.word 456912800
.word -1930624925
.word 1981026677
.word -641082819
.word 1259278117
.word 1481501124
.word -444342667
.word 1947675341
.word -608834426
.word -906130612
.word -480045052
.word 182898482
.word 1025708506
.word -363535658
.word 1180470009
.word -62562240
.word 987486196
.word -531865065
.word 676720261
.word 1125242878
.word -1621168845
.word 1990517921
.word -1383494740
.word -1522980151
.word 434249114
.word -129245145
.word 97983477
.word 658513595
.word 1548110625
.word 1140579073
.word -1285950881
 
op2_signed:
.word 1389891600
.word 176
.word -129
.word -10300
.word -24713
.word 36
.word 539501672
.word -412262764
.word -999517400
.word 27
.word -185
.word 632355259
.word 1914747195
.word -202
.word 152
.word -151
.word -49343821
.word 161975794
.word -172
.word -3509
.word 8811
.word -135
.word -224114196
.word 5373
.word -30158
.word 735955126
.word 7320
.word -1137550910
.word 413980723
.word -28499
.word -1858419248
.word -31374
.word 153
.word -245
.word -231
.word 1065580722
.word 114
.word 25851
.word 1113949699
.word 1883394154
.word 211
.word 22075
.word -143
.word -1052684430
.word -197
.word -28563
.word -12517
.word 141
.word -197
.word -79
.word 79
.word -103
.word 563090517
.word -13711
.word -2
.word -250
.word -130626268
.word -1824933506
.word 501
.word 135
.word -965460037
.word 90
.word -24983
.word -5626
.word -175
.word -42
.word -72
.word 9948
.word -29411
.word 223
.word 16237
.word -192
.word -297352066
.word 2140975764
.word -511619965
.word -7170
.word -380546211
.word 1065203866
.word -81584403
.word -23445
.word 213
.word 31410
.word -270351532
.word -8040
.word -13293
.word 16010
.word -223
.word -60
.word 9338
.word -46
.word 26045
.word 21525
.word 1705744137
.word 1754448529
.word -1602585578
.word 1341015177
.word 1
.word -72
.word -156
.word 1932634409
 
quotient_signed:
.word 0
.word 3662321
.word -10958285
.word -91289
.word -52889
.word 1936143
.word 1
.word 4
.word 0
.word -24600039
.word -4643527
.word 0
.word 0
.word 4658168
.word 4207659
.word 2119740
.word 3
.word -8
.word -7917684
.word 448180
.word 25319
.word 15878050
.word 3
.word -73098
.word 68835
.word 0
.word 118799
.word 0
.word -2
.word -65465
.word 0
.word 45760
.word 2048348
.word -374428
.word -239008
.word -1
.word -13929195
.word 4649
.word 1
.word 0
.word 3126854
.word -84594
.word -1480524
.word -1
.word -5131351
.word -65335
.word -106870
.word -10566572
.word 4285313
.word -15855145
.word 13450423
.word 19696127
.word -1
.word -4640
.word -1042194186
.word -4742804
.word -2
.word 0
.word -2615099
.word 5818878
.word 0
.word -8763968
.word -69745
.word -347063
.word 10679308
.word 17330261
.word -6354778
.word -209398
.word -71140
.word 2048936
.word -118902
.word -10317847
.word 2
.word 0
.word -2
.word 61972
.word -5
.word 0
.word 11
.word 20475
.word 858678
.word 32655
.word 1
.word -146824
.word 4706
.word 61679
.word 2385045
.word -11278671
.word 120501
.word 35242800
.word 76426
.word -64273
.word 0
.word 0
.word 0
.word 0
.word 658513595
.word -21501536
.word -7311404
.word 0
 
remainder_signed:
.word 1173464398
.word 74
.word 101
.word 3395
.word 5939
.word 0
.word 251852117
.word -102083745
.word -540034563
.word 0
.word 130
.word 506263265
.word 1672805452
.word -148
.word 119
.word -30
.word -46295143
.word -105316340
.word 63
.word -3202
.word 98
.word -35
.word -99022050
.word -700
.word -20385
.word -133598861
.word 4302
.word 727395029
.word -345777100
.word 12234
.word 1001660457
.word -31177
.word 131
.word 15
.word 192
.word -232564715
.word -44
.word 3904
.word 139270823
.word 664380448
.word 143
.word -10576
.word 139
.word 119690889
.word 85
.word 316
.word 6720
.word -65
.word -93
.word 21
.word 62
.word -63
.word -362639841
.word 10364
.word 0
.word 0
.word 83720244
.word 1506745295
.word -395
.word 96
.word -960828075
.word -75
.word 10472
.word 5351
.word -150
.word -9
.word 19
.word -8770
.word 27602
.word 72
.word -13151
.word 53
.word -46378687
.word 1259278117
.word 458261194
.word -3427
.word 44944286
.word -608834426
.word -8702179
.word -8677
.word 68
.word 14956
.word -93184126
.word 5049
.word -5382
.word 5406
.word -30
.word 1
.word 4540
.word -45
.word 2751
.word -18415
.word -1522980151
.word 434249114
.word -129245145
.word 97983477
.word 0
.word 33
.word 49
.word -1285950881
/*
* Test division (divu, divs, modu, mods)
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x10000004
// Test unsigned division
lc r32, op1
lc r33, op2
lc r34, quotient
lc r35, remainder
lc r36, cnt_loop
lc r10, 100 // counter
cnt_loop:
lw r0, r32
lw r1, r33
divu r2, r0, r1
modu r3, r0, r1
lw r4, r34
lw r5, r35
cjmpne r102, r2, r4 // failure
cjmpne r102, r3, r5 // failure
mul r6, r2, r1
add r6, r6, r3
cjmpne r102, r6, r0 // failure
add r32, r32, 4
add r33, r33, 4
add r34, r34, 4
add r35, r35, 4
sub r10, r10, 1
cjmpug r36, r10, 0 // cnt_loop
sw r103, 1
 
// Test signed division
 
lc r32, op1_signed
lc r33, op2_signed
lc r34, quotient_signed
lc r35, remainder_signed
lc r36, cnt_loop2
lc r10, 100 // counter
cnt_loop2:
lw r0, r32
lw r1, r33
divs r2, r0, r1
mods r3, r0, r1
lw r4, r34
lw r5, r35
cjmpne r102, r2, r4 // failure
cjmpne r102, r3, r5 // failure
mul r6, r2, r1
add r6, r6, r3
cjmpne r102, r6, r0 // failure
add r32, r32, 4
add r33, r33, 4
add r34, r34, 4
add r35, r35, 4
sub r10, r10, 1
cjmpug r36, r10, 0 // cnt_loop2
sw r103, 2
// Random division/multiplication test
 
mov r64, 1 // initial PRBS value
lc r65, 1103515245 // PRBS multiplier
lc r66, 12345 // PRBS addition constant
lc r67, 32767 // PRBS mask
lc r68, 16384
lc r10, 1000
lc r32, rnd_loop
lc r33, rand
lc r34, rnd_cont
rnd_loop:
call r33 // rand
sub r1, r0, r68 // dividend in r1
call r33 // rand
sub r2, r0, r68 // divisor in r2
cjmpne r34, r2, 0 // rnd_cont
mov r2, 1
rnd_cont:
divs r3, r1, r2
mods r4, r1, r2
mul r5, r3, r2
add r5, r5, r4
cjmpne r102, r5, r1 // failure
sub r10, r10, 1
cjmpug r32, r10, 0 // rnd_loop
sw r103, 3
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
 
// Linear congruent pseudo-random number generator (as in ISO/IEC 9899:1999)
 
rand:
mul r64, r64, r65
add r64, r64, r66
sru r0, r64, 16
and r0, r0, r67
ret
 
op1:
.word 2227053353
.word 4059122064
.word 210189531
.word 1203176988
.word 2794175299
.word 1562322232
.word 219364165
.word 1352278066
.word 4130490642
.word 1156715599
.word 993179440
.word 529260957
.word 1235055289
.word 2994792917
.word 348116583
.word 1475314534
.word 517066081
.word 2230328806
.word 1395407336
.word 4094467700
.word 3476389465
.word 1210945747
.word 3236243997
.word 1348406852
.word 118818171
.word 1692045936
.word 1190663529
.word 1731139289
.word 1986549712
.word 2038965422
.word 1173634277
.word 1499514357
.word 3268423030
.word 136673642
.word 672245098
.word 797742983
.word 3236010945
.word 1421197958
.word 948983249
.word 3780009574
.word 3802522271
.word 2303076920
.word 2976105080
.word 2531287614
.word 4049504575
.word 488644257
.word 336561159
.word 753386953
.word 4270696691
.word 1966854304
.word 3201322355
.word 4203490113
.word 2503116372
.word 3405118694
.word 3103595329
.word 3553466644
.word 861103782
.word 1275325516
.word 3484264974
.word 1293196760
.word 4173438076
.word 2275850340
.word 3885575502
.word 1091087744
.word 2669208735
.word 69325132
.word 2319663187
.word 2510410703
.word 2902980138
.word 845791433
.word 3327530895
.word 948013067
.word 3889190137
.word 2250058130
.word 927988252
.word 1820385269
.word 135357763
.word 3770160619
.word 1650193531
.word 1250420215
.word 2982397572
.word 788754293
.word 1132578971
.word 2174830494
.word 2743197342
.word 1473236291
.word 671295260
.word 1615737929
.word 722317890
.word 1373795119
.word 3187744723
.word 353993505
.word 3691968907
.word 2452722797
.word 1784599952
.word 912987979
.word 2183033578
.word 2941180254
.word 3706025245
.word 2141225307
 
op2:
.word 225
.word 3018582459
.word 6462
.word 222
.word 799
.word 19412
.word 3676048009
.word 16622
.word 32158
.word 64
.word 8865
.word 2580197594
.word 3313401900
.word 1405929962
.word 214
.word 24905
.word 1914084509
.word 41372239
.word 203
.word 213
.word 50
.word 3866464211
.word 247
.word 2371998720
.word 528626491
.word 2243022420
.word 106
.word 21608
.word 250
.word 635130622
.word 22739
.word 61
.word 3563638217
.word 97
.word 2849410241
.word 241
.word 2594761086
.word 191
.word 40
.word 48
.word 6924
.word 2054783657
.word 702209830
.word 968832018
.word 1826819693
.word 17099
.word 25861
.word 142
.word 190
.word 3078
.word 130
.word 32560
.word 170
.word 2308931006
.word 26703
.word 13
.word 19211
.word 115
.word 667594965
.word 1495759348
.word 205
.word 19605
.word 61
.word 2772527081
.word 16917
.word 147
.word 175
.word 206
.word 16033
.word 2356
.word 7643
.word 97
.word 2017990513
.word 41
.word 13752
.word 109
.word 165
.word 225
.word 2698
.word 12859
.word 12455
.word 158
.word 4136249385
.word 3446419784
.word 140
.word 20679
.word 23935
.word 48162108
.word 5302
.word 126
.word 80
.word 741054488
.word 188
.word 116
.word 64
.word 177
.word 141
.word 16378
.word 3662043152
.word 19292
 
quotient:
.word 9898014
.word 1
.word 32527
.word 5419716
.word 3497090
.word 80482
.word 0
.word 81354
.word 128443
.word 18073681
.word 112033
.word 0
.word 0
.word 2
.word 1626713
.word 59237
.word 0
.word 53
.word 6873927
.word 19222853
.word 69527789
.word 0
.word 13102202
.word 0
.word 0
.word 0
.word 11232674
.word 80115
.word 7946198
.word 3
.word 51613
.word 24582202
.word 0
.word 1409006
.word 0
.word 3310136
.word 1
.word 7440827
.word 23724581
.word 78750199
.word 549179
.word 1
.word 4
.word 2
.word 2
.word 28577
.word 13014
.word 5305541
.word 22477351
.word 639003
.word 24625556
.word 129099
.word 14724213
.word 1
.word 116226
.word 273343588
.word 44823
.word 11089787
.word 5
.word 0
.word 20358234
.word 116085
.word 63697959
.word 0
.word 157782
.word 471599
.word 13255218
.word 12186459
.word 181062
.word 358994
.word 435369
.word 9773330
.word 1
.word 54879466
.word 67480
.word 16700782
.word 820350
.word 16756269
.word 611635
.word 97240
.word 239453
.word 4992115
.word 0
.word 0
.word 19594266
.word 71243
.word 28046
.word 33
.word 136234
.word 10903135
.word 39846809
.word 0
.word 19638132
.word 21144162
.word 27884374
.word 5158124
.word 15482507
.word 179581
.word 1
.word 110990
 
remainder:
.word 203
.word 1040539605
.word 57
.word 36
.word 389
.word 5648
.word 219364165
.word 11878
.word 20648
.word 15
.word 6895
.word 529260957
.word 1235055289
.word 182932993
.word 1
.word 17049
.word 517066081
.word 37600139
.word 155
.word 11
.word 15
.word 1210945747
.word 103
.word 1348406852
.word 118818171
.word 1692045936
.word 85
.word 14369
.word 212
.word 133573556
.word 6270
.word 35
.word 3268423030
.word 60
.word 672245098
.word 207
.word 641249859
.word 1
.word 9
.word 22
.word 6875
.word 248293263
.word 167265760
.word 593623578
.word 395865189
.word 6134
.word 6105
.word 131
.word 1
.word 3070
.word 75
.word 26673
.word 162
.word 1096187688
.word 12451
.word 0
.word 9129
.word 11
.word 146290149
.word 1293196760
.word 106
.word 3915
.word 3
.word 1091087744
.word 10641
.word 79
.word 37
.word 149
.word 13092
.word 1569
.word 5628
.word 57
.word 1871199624
.word 24
.word 3292
.word 31
.word 13
.word 94
.word 2301
.word 11055
.word 10457
.word 123
.word 1132578971
.word 2174830494
.word 102
.word 2294
.word 14250
.word 26388365
.word 5222
.word 109
.word 3
.word 353993505
.word 91
.word 5
.word 16
.word 31
.word 91
.word 2636
.word 43982093
.word 6227
 
op1_signed:
.word 1173464398
.word 644568570
.word 1413618866
.word 940280095
.word 1307051796
.word 69701148
.word 791353789
.word -1751134801
.word -540034563
.word -664201053
.word 859052625
.word 506263265
.word 1672805452
.word -940950084
.word 639564287
.word -320080770
.word -194326606
.word -1401122692
.word 1361841711
.word -1572666822
.word 223085807
.word -2143536785
.word -771364638
.word -392756254
.word -2075946315
.word -133598861
.word 869612982
.word 727395029
.word -1173738546
.word 1865699269
.word 1001660457
.word -1435705417
.word 313397375
.word 91734875
.word 55211040
.word -1298145437
.word -1587928274
.word 120185203
.word 1253220522
.word 664380448
.word 659766337
.word -1867423126
.word 211715071
.word 1172375319
.word 1010876232
.word 1866163921
.word 1337698510
.word -1489886717
.word -844206754
.word 1252556476
.word 1062583479
.word -2028701144
.word -925730358
.word 63629404
.word 2084388372
.word 1185701000
.word 344972780
.word 1506745295
.word -1310164994
.word 785548626
.word -960828075
.word -788757195
.word 1742449807
.word 1952581789
.word -1868879050
.word -727870971
.word 457544035
.word -2083100074
.word 2092326142
.word 456912800
.word -1930624925
.word 1981026677
.word -641082819
.word 1259278117
.word 1481501124
.word -444342667
.word 1947675341
.word -608834426
.word -906130612
.word -480045052
.word 182898482
.word 1025708506
.word -363535658
.word 1180470009
.word -62562240
.word 987486196
.word -531865065
.word 676720261
.word 1125242878
.word -1621168845
.word 1990517921
.word -1383494740
.word -1522980151
.word 434249114
.word -129245145
.word 97983477
.word 658513595
.word 1548110625
.word 1140579073
.word -1285950881
 
op2_signed:
.word 1389891600
.word 176
.word -129
.word -10300
.word -24713
.word 36
.word 539501672
.word -412262764
.word -999517400
.word 27
.word -185
.word 632355259
.word 1914747195
.word -202
.word 152
.word -151
.word -49343821
.word 161975794
.word -172
.word -3509
.word 8811
.word -135
.word -224114196
.word 5373
.word -30158
.word 735955126
.word 7320
.word -1137550910
.word 413980723
.word -28499
.word -1858419248
.word -31374
.word 153
.word -245
.word -231
.word 1065580722
.word 114
.word 25851
.word 1113949699
.word 1883394154
.word 211
.word 22075
.word -143
.word -1052684430
.word -197
.word -28563
.word -12517
.word 141
.word -197
.word -79
.word 79
.word -103
.word 563090517
.word -13711
.word -2
.word -250
.word -130626268
.word -1824933506
.word 501
.word 135
.word -965460037
.word 90
.word -24983
.word -5626
.word -175
.word -42
.word -72
.word 9948
.word -29411
.word 223
.word 16237
.word -192
.word -297352066
.word 2140975764
.word -511619965
.word -7170
.word -380546211
.word 1065203866
.word -81584403
.word -23445
.word 213
.word 31410
.word -270351532
.word -8040
.word -13293
.word 16010
.word -223
.word -60
.word 9338
.word -46
.word 26045
.word 21525
.word 1705744137
.word 1754448529
.word -1602585578
.word 1341015177
.word 1
.word -72
.word -156
.word 1932634409
 
quotient_signed:
.word 0
.word 3662321
.word -10958285
.word -91289
.word -52889
.word 1936143
.word 1
.word 4
.word 0
.word -24600039
.word -4643527
.word 0
.word 0
.word 4658168
.word 4207659
.word 2119740
.word 3
.word -8
.word -7917684
.word 448180
.word 25319
.word 15878050
.word 3
.word -73098
.word 68835
.word 0
.word 118799
.word 0
.word -2
.word -65465
.word 0
.word 45760
.word 2048348
.word -374428
.word -239008
.word -1
.word -13929195
.word 4649
.word 1
.word 0
.word 3126854
.word -84594
.word -1480524
.word -1
.word -5131351
.word -65335
.word -106870
.word -10566572
.word 4285313
.word -15855145
.word 13450423
.word 19696127
.word -1
.word -4640
.word -1042194186
.word -4742804
.word -2
.word 0
.word -2615099
.word 5818878
.word 0
.word -8763968
.word -69745
.word -347063
.word 10679308
.word 17330261
.word -6354778
.word -209398
.word -71140
.word 2048936
.word -118902
.word -10317847
.word 2
.word 0
.word -2
.word 61972
.word -5
.word 0
.word 11
.word 20475
.word 858678
.word 32655
.word 1
.word -146824
.word 4706
.word 61679
.word 2385045
.word -11278671
.word 120501
.word 35242800
.word 76426
.word -64273
.word 0
.word 0
.word 0
.word 0
.word 658513595
.word -21501536
.word -7311404
.word 0
 
remainder_signed:
.word 1173464398
.word 74
.word 101
.word 3395
.word 5939
.word 0
.word 251852117
.word -102083745
.word -540034563
.word 0
.word 130
.word 506263265
.word 1672805452
.word -148
.word 119
.word -30
.word -46295143
.word -105316340
.word 63
.word -3202
.word 98
.word -35
.word -99022050
.word -700
.word -20385
.word -133598861
.word 4302
.word 727395029
.word -345777100
.word 12234
.word 1001660457
.word -31177
.word 131
.word 15
.word 192
.word -232564715
.word -44
.word 3904
.word 139270823
.word 664380448
.word 143
.word -10576
.word 139
.word 119690889
.word 85
.word 316
.word 6720
.word -65
.word -93
.word 21
.word 62
.word -63
.word -362639841
.word 10364
.word 0
.word 0
.word 83720244
.word 1506745295
.word -395
.word 96
.word -960828075
.word -75
.word 10472
.word 5351
.word -150
.word -9
.word 19
.word -8770
.word 27602
.word 72
.word -13151
.word 53
.word -46378687
.word 1259278117
.word 458261194
.word -3427
.word 44944286
.word -608834426
.word -8702179
.word -8677
.word 68
.word 14956
.word -93184126
.word 5049
.word -5382
.word 5406
.word -30
.word 1
.word 4540
.word -45
.word 2751
.word -18415
.word -1522980151
.word 434249114
.word -129245145
.word 97983477
.word 0
.word 33
.word 49
.word -1285950881
/firmware/test014.asm
1,27 → 1,27
/*
* Test "hlt" instruction
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lc iv0, timer_handler
mov r10, 2
mov cr, 1 // enable interrupt 0
lc r0, 1000
sw r104, r0
sw r103, 1
hlt
sw r100, r10 // r10 will be 2 if interrupt hasn't been called, which is a failure code
halt:
hlt
jmp r101 // halt
timer_handler:
mov r10, 1
iret
/*
* Test "hlt" instruction
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lc iv0, timer_handler
mov r10, 2
mov cr, 1 // enable interrupt 0
lc r0, 1000
sw r104, r0
sw r103, 1
hlt
sw r100, r10 // r10 will be 2 if interrupt hasn't been called, which is a failure code
halt:
hlt
jmp r101 // halt
timer_handler:
mov r10, 1
iret
/firmware/test015.asm
1,59 → 1,59
/*
* Test unconventional interrupt handlers
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, 0x30000000 // coprocessor input register
lc r103, 0x30000004 // coprocessor output register
lc r104, failure
 
// Initialize interrupt handlers
lc iv2, coprocessor_handler
mov cr, 4 // enable interrupts from the coprocessor
lc r110, interrupt_exit@1 // '1' in the LSB is an interrupt exit flag
// Initialize random generator
mov r64, 1 // initial PRBS value
lc r65, 1103515245 // PRBS multiplier
lc r66, 12345 // PRBS addition constant
lc r67, 32767 // PRBS mask
// Main loop
lc r32, loop
lc r33, rand
lc r34, 2000
loop:
call r33
cjmpe r32, r0, 0 // if(r==0) continue;
sw r102, r0
hlt
interrupt_exit:
lw r1, r103
mul r0, r0, 3
cjmpne r104, r0, r1 // failure
sub r34, r34, 1
cjmpug r32, r34, 0 // loop
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
 
rand:
mul r64, r64, r65
add r64, r64, r66
sru r0, r64, 16
and r0, r0, r67
ret
coprocessor_handler:
jmp r110 // exit to a given point, ignore irp
/*
* Test unconventional interrupt handlers
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, 0x30000000 // coprocessor input register
lc r103, 0x30000004 // coprocessor output register
lc r104, failure
 
// Initialize interrupt handlers
lc iv2, coprocessor_handler
mov cr, 4 // enable interrupts from the coprocessor
lc r110, interrupt_exit@1 // '1' in the LSB is an interrupt exit flag
// Initialize random generator
mov r64, 1 // initial PRBS value
lc r65, 1103515245 // PRBS multiplier
lc r66, 12345 // PRBS addition constant
lc r67, 32767 // PRBS mask
// Main loop
lc r32, loop
lc r33, rand
lc r34, 2000
loop:
call r33
cjmpe r32, r0, 0 // if(r==0) continue;
sw r102, r0
hlt
interrupt_exit:
lw r1, r103
mul r0, r0, 3
cjmpne r104, r0, r1 // failure
sub r34, r34, 1
cjmpug r32, r34, 0 // loop
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
 
rand:
mul r64, r64, r65
add r64, r64, r66
sru r0, r64, 16
and r0, r0, r67
ret
coprocessor_handler:
jmp r110 // exit to a given point, ignore irp
/firmware/test016.asm
1,47 → 1,47
/*
* Test for temporarily blocked interrupts
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lc iv0, timer_handler
lc cr, 0x101 // enable interrupt 0 in temporarily blocked state
lc r32, 0 // interrupt handler call counter
lc r33, 1000 // loop counter
lc r34, loop1
lc r35, loop2
sw r104, 100
sw r103, 1
 
loop1:
sub r33, r33, 1
cjmpug r34, r33, 0 // loop1
lc r33, 1000
mov cr, 1 // unblock interrupt 0
loop2:
sub r33, r33, 1
cjmpug r35, r33, 0 // loop2
// r32 should be 1 by this point
cjmpne r102, r32, 1 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
timer_handler:
add r32, r32, 1
iret
/*
* Test for temporarily blocked interrupts
*/
 
lc r100, 0x10000000 // test result output pointer
lc r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lc iv0, timer_handler
lc cr, 0x101 // enable interrupt 0 in temporarily blocked state
lc r32, 0 // interrupt handler call counter
lc r33, 1000 // loop counter
lc r34, loop1
lc r35, loop2
sw r104, 100
sw r103, 1
 
loop1:
sub r33, r33, 1
cjmpug r34, r33, 0 // loop1
lc r33, 1000
mov cr, 1 // unblock interrupt 0
loop2:
sub r33, r33, 1
cjmpug r35, r33, 0 // loop2
// r32 should be 1 by this point
cjmpne r102, r32, 1 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
timer_handler:
add r32, r32, 1
iret
/firmware/test017.asm
1,25 → 1,25
/*
* Test the new "lcs" instruction
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lcs r102, failure
 
lc r0, 1000000
lc r1, -1000011
lcs r10, 1000000
lcs r11, -1000011
cjmpne r102, r0, r10 // failure
cjmpne r102, r1, r11 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
/*
* Test the new "lcs" instruction
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lcs r102, failure
 
lc r0, 1000000
lc r1, -1000011
lcs r10, 1000000
lcs r11, -1000011
cjmpne r102, r0, r10 // failure
cjmpne r102, r1, r11 // failure
sw r100, 1
jmp r101 // halt
failure:
sw r100, 2
halt:
hlt
jmp r101 // halt
/firmware/test018.asm
1,1122 → 1,1122
/*
* Additional interrupt test. The objective is to check that interrupt
* arrival at any time will not disrupt program flow.
*
* The main part of the program calculates CRC32 of a 16 kbyte block
* of data. The other part generates interrupts at random times using
* the C99 pseudorandom generator and the timer peripheral.
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lcs r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
// Set up the interrupt handler
lcs r200, 0 // initialize counter
lc r201, 0x10000008 // output pointer
lc r202, 1103515245 // PRNG: multiplicative constant
lcs r203, 12345 // PRNG: additive constant
lcs r204, 32767 // PRNG: modulo
lcs r205, 1 // PRNG: current seed value
lcs iv0, timer_handler
mov cr, 1 // enable interrupt 0
sw r104, 100
sw r103, 1 // activate timer, one pulse
// Main routine
lc r16, 0x10000004 // output pointer
lcs r17, 0xFFFFFFFF // initial CRC value
lc r18, 0xEDB88320 // polynom
lcs r19, data // input pointer
lcs r20, 4096 // data block size in words
lcs r32, word_loop
lcs r33, bit_loop
lcs r34, dont_xor
mov r64, 0 // word counter
word_loop:
lw r0, r19
mov r65, 0 // bit counter
bit_loop:
and r1, r0, 1
and r2, r17, 1
sru r17, r17, 1
xor r3, r1, r2
cjmpe r34, r3, 0 // dont_xor
xor r17, r17, r18
dont_xor:
sru r0, r0, 1
add r65, r65, 1
cjmpul r33, r65, 32 // bit_loop
sw r16, r64
add r19, r19, 4
add r64, r64, 1
cjmpul r32, r64, r20 // word_loop
not r17, r17
sw r16, r17
// Check main routine result
lc r0, 0xF958DFE2
cjmpne r102, r0, r17
mov cr, 0 // disable interrupts
sw r103, 0 // deactivate timer
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
 
timer_handler:
// PRNG generator from C99 (ISO/IEC 9899:1999)
mul r205, r205, r202
add r205, r205, r203
sru r220, r205, 16
and r220, r220, r204 // r220 now contains the C99 pseudorandom number
and r221, r220, 0x1F
add r221, r221, 32 // r221 is now a pseudorandom number from the [32, 63] range
sw r104, r221 // set up the timer delay
sw r103, 1 // single shot
iret
.align
data:
.byte 0xD7, 0x64, 0xC8, 0xCC, 0xE9, 0x32, 0x55, 0xC4, 0x47, 0x8D, 0x7A, 0xA0, 0x5D, 0x83, 0xF3, 0xEA
.byte 0xA2, 0xB7, 0x24, 0x9B, 0x04, 0x3E, 0x23, 0xCD, 0x28, 0x66, 0x21, 0x1B, 0xFF, 0x37, 0x83, 0xD6
.byte 0x9C, 0x4B, 0xA3, 0x86, 0x7E, 0xF9, 0x4A, 0xC5, 0x86, 0xC5, 0x66, 0xE4, 0x48, 0x5A, 0xCE, 0xEB
.byte 0x11, 0xF3, 0x86, 0x16, 0x31, 0xA9, 0xE3, 0x59, 0x10, 0x05, 0x75, 0x10, 0x3C, 0xF8, 0xE6, 0xD9
.byte 0x44, 0x8A, 0x60, 0xC2, 0x83, 0xAA, 0x88, 0x0A, 0x70, 0xEE, 0xEE, 0xB8, 0x48, 0xBD, 0xA3, 0x5A
.byte 0xB0, 0x2A, 0x70, 0xE1, 0xD4, 0x54, 0x3A, 0xE4, 0x59, 0xAF, 0xF4, 0x96, 0xA8, 0xDB, 0x70, 0xEC
.byte 0x65, 0xD0, 0xAF, 0xE9, 0x7B, 0x37, 0xF3, 0xEB, 0x25, 0xE1, 0xA4, 0x6E, 0x9E, 0x47, 0xC9, 0x4E
.byte 0x72, 0x39, 0x30, 0x46, 0x8E, 0x6A, 0x2B, 0xE8, 0x1A, 0x20, 0x7E, 0xC2, 0xFC, 0xEF, 0xAF, 0x62
.byte 0xBF, 0x5E, 0x4B, 0x3B, 0x95, 0x3E, 0x27, 0xBB, 0x20, 0xCB, 0x2A, 0xBE, 0x13, 0xF3, 0x0D, 0x85
.byte 0x2D, 0x3D, 0xCC, 0xBB, 0xA8, 0xF7, 0xA3, 0xC2, 0x17, 0x22, 0x85, 0x14, 0x11, 0x34, 0x76, 0xD1
.byte 0x92, 0xC1, 0x0D, 0x28, 0xFF, 0x34, 0xE3, 0x20, 0xFF, 0x0D, 0xDE, 0x12, 0x01, 0xEC, 0x98, 0x2E
.byte 0x29, 0x64, 0xE9, 0xD1, 0x5B, 0x8D, 0x94, 0x73, 0xAF, 0x19, 0x87, 0xC1, 0x4D, 0xFE, 0x93, 0xE0
.byte 0xBF, 0xA1, 0x09, 0xBF, 0xD5, 0xEC, 0xDF, 0xD4, 0xFA, 0xBE, 0xE7, 0xFB, 0xAA, 0x7F, 0x29, 0xD4
.byte 0xE3, 0x13, 0xA6, 0x3F, 0xA1, 0x3A, 0xB3, 0x51, 0x54, 0x3B, 0x12, 0xA2, 0x39, 0xA6, 0x82, 0xF8
.byte 0x47, 0x8B, 0xB8, 0x1C, 0x78, 0x97, 0xF1, 0x73, 0x56, 0xD9, 0x6F, 0x00, 0x58, 0x99, 0xD5, 0x3B
.byte 0xAC, 0x7B, 0x7B, 0x4E, 0xB6, 0x2E, 0x9F, 0x0A, 0x69, 0xB2, 0xAC, 0xA3, 0x58, 0x2F, 0x9B, 0xA0
.byte 0xBB, 0x54, 0xBD, 0x33, 0xEB, 0xAF, 0xA7, 0x41, 0x88, 0x16, 0x42, 0xE0, 0xAF, 0x17, 0x1C, 0x5C
.byte 0x93, 0x97, 0xAA, 0x49, 0xC6, 0x49, 0x54, 0x30, 0xFB, 0x00, 0xD3, 0x54, 0x30, 0x6F, 0xF5, 0xEB
.byte 0xC3, 0xB2, 0x1F, 0xAF, 0x62, 0xC6, 0xF1, 0xEA, 0xDC, 0x34, 0xCB, 0x8C, 0x4C, 0xE7, 0xE8, 0xDF
.byte 0x7F, 0x93, 0x29, 0x46, 0xDD, 0x7E, 0x76, 0xD9, 0x7E, 0x4A, 0x2E, 0xAF, 0xBA, 0x23, 0x9A, 0x7E
.byte 0xD6, 0xB9, 0x2D, 0x38, 0x7F, 0x1F, 0x23, 0x5C, 0x53, 0xEE, 0xE8, 0x9F, 0xD6, 0xD1, 0x7E, 0x55
.byte 0x64, 0xA8, 0x9B, 0x42, 0x26, 0x12, 0x1B, 0xA5, 0x5D, 0x49, 0x54, 0x17, 0x6D, 0xEF, 0x95, 0x43
.byte 0xA8, 0xC3, 0x7C, 0x28, 0xE2, 0xA0, 0x84, 0x35, 0x8E, 0x6D, 0xD4, 0x64, 0x3E, 0x53, 0xBA, 0xA3
.byte 0xFC, 0x56, 0xE5, 0x22, 0x69, 0x01, 0xC8, 0xC6, 0x4B, 0x1D, 0xDD, 0xB8, 0x0C, 0x72, 0xFC, 0xB5
.byte 0x35, 0x79, 0xDD, 0x18, 0x19, 0x62, 0x4D, 0xA8, 0xCF, 0x21, 0x0D, 0x0D, 0x75, 0xC7, 0xB1, 0x71
.byte 0x1E, 0x96, 0x94, 0x87, 0x98, 0x5C, 0x4D, 0xE3, 0x7A, 0x2B, 0x9C, 0x86, 0x9E, 0x98, 0x3B, 0xD4
.byte 0x11, 0x19, 0xEC, 0x2B, 0x7B, 0x39, 0xD3, 0x4A, 0x5B, 0xE0, 0x58, 0xD0, 0xA8, 0x09, 0x41, 0xC7
.byte 0xA0, 0xD6, 0x4E, 0x38, 0x32, 0x9C, 0x1C, 0xAC, 0xC8, 0xB8, 0x33, 0x66, 0x50, 0x6F, 0x3B, 0x62
.byte 0x88, 0x27, 0x8E, 0x03, 0x61, 0x61, 0x4E, 0xBC, 0x42, 0xA6, 0x8D, 0xEB, 0xAF, 0xCF, 0xB2, 0x4F
.byte 0xA5, 0x01, 0x88, 0xD8, 0x9E, 0xA4, 0x84, 0x66, 0x5C, 0xB8, 0xCD, 0xAD, 0x27, 0x08, 0x10, 0xAF
.byte 0x30, 0x9E, 0xB3, 0x91, 0x00, 0x01, 0x4E, 0x42, 0xA7, 0xDB, 0x2E, 0x57, 0xAA, 0xE1, 0xA7, 0x50
.byte 0xE2, 0x2F, 0x28, 0x80, 0xD4, 0xAC, 0xE7, 0x30, 0x64, 0xB4, 0xDE, 0x8C, 0xBD, 0xEE, 0x3B, 0xED
.byte 0x8D, 0xEE, 0x7E, 0x8D, 0xF0, 0xCC, 0xD0, 0x98, 0xA8, 0xFE, 0xEF, 0x53, 0xDF, 0x96, 0xA3, 0xC2
.byte 0xC6, 0xCB, 0x43, 0x9A, 0x78, 0x2A, 0xCB, 0xDD, 0xDF, 0xAA, 0x69, 0x9C, 0x98, 0xA5, 0x89, 0x25
.byte 0x94, 0x08, 0xB3, 0x84, 0xD5, 0x83, 0x1C, 0x7D, 0x82, 0x0C, 0xD0, 0x62, 0xA3, 0x73, 0x24, 0x69
.byte 0x3F, 0x68, 0x04, 0xB7, 0x92, 0xD0, 0x95, 0x72, 0x7A, 0xFE, 0x0F, 0x13, 0xA4, 0x98, 0x38, 0x38
.byte 0xA1, 0xEC, 0xBC, 0x76, 0x70, 0xD9, 0xF3, 0xF2, 0xE6, 0xC4, 0x55, 0x89, 0x38, 0x7A, 0xF3, 0x77
.byte 0xE2, 0xF7, 0x2F, 0x75, 0xC7, 0xC4, 0xE7, 0x41, 0xC2, 0xF6, 0x54, 0x67, 0x8F, 0x8D, 0x9F, 0x30
.byte 0x7A, 0x5C, 0xA7, 0xEA, 0x35, 0x9B, 0xDD, 0x1C, 0x5F, 0x32, 0xA5, 0x97, 0xAD, 0x98, 0x0F, 0x8F
.byte 0x90, 0x3E, 0x04, 0x58, 0x02, 0xEC, 0x99, 0xC5, 0xE3, 0xEE, 0x2C, 0x72, 0x7C, 0xCB, 0xA3, 0xF7
.byte 0x27, 0x4A, 0xE1, 0x5D, 0xE6, 0xBF, 0x79, 0x45, 0xF2, 0x1F, 0xDD, 0x9F, 0xB7, 0xEC, 0x2F, 0x48
.byte 0x2A, 0x33, 0xA0, 0x2D, 0x20, 0x3A, 0xF2, 0x03, 0x29, 0x1E, 0x76, 0xA6, 0xEA, 0x19, 0x9D, 0x12
.byte 0x64, 0x7F, 0x6F, 0x4B, 0x3E, 0xE9, 0x90, 0x30, 0x08, 0x6E, 0xD0, 0xC0, 0x5B, 0xFF, 0x09, 0x86
.byte 0x33, 0xA9, 0xB3, 0x53, 0xE3, 0xA5, 0x57, 0x0C, 0xC4, 0xCD, 0xB2, 0xAE, 0xE7, 0x50, 0xC0, 0x4C
.byte 0xCF, 0x30, 0x97, 0x0D, 0x19, 0x28, 0x3E, 0x22, 0x96, 0x0E, 0xE3, 0xF2, 0x0E, 0xEC, 0x78, 0x41
.byte 0x96, 0x2B, 0x95, 0x79, 0xD0, 0xED, 0x86, 0x95, 0xBA, 0x39, 0x43, 0xA2, 0x89, 0x04, 0xEE, 0x58
.byte 0x34, 0x85, 0x66, 0x4E, 0xAE, 0xA5, 0x71, 0x44, 0xB4, 0x55, 0x36, 0xC2, 0x42, 0xAE, 0x04, 0xD8
.byte 0xDA, 0x99, 0x52, 0xAA, 0x86, 0xD9, 0x40, 0x41, 0x12, 0x83, 0xE3, 0x9C, 0x87, 0xD2, 0xF5, 0xBC
.byte 0x58, 0x5C, 0x0B, 0x06, 0x01, 0x7C, 0x4A, 0xB5, 0xD1, 0x81, 0x77, 0x14, 0x30, 0x7B, 0xEC, 0x0B
.byte 0x15, 0x3E, 0xB6, 0x9C, 0x17, 0xF6, 0xDE, 0x2A, 0x79, 0xC1, 0xC7, 0x01, 0x94, 0xBC, 0xBE, 0xEC
.byte 0x18, 0xC9, 0xF2, 0x19, 0x46, 0x3D, 0xCF, 0x18, 0xBF, 0x46, 0x2C, 0xF0, 0xC2, 0x18, 0xFB, 0xD8
.byte 0x57, 0xB1, 0x74, 0x6F, 0xA7, 0x52, 0x99, 0x21, 0x14, 0x60, 0x23, 0xA8, 0x1D, 0xE1, 0x95, 0x35
.byte 0xAB, 0x87, 0x4F, 0xF1, 0xC4, 0x1F, 0x09, 0x83, 0x66, 0x36, 0x73, 0x29, 0x4E, 0x6F, 0x01, 0xA6
.byte 0x20, 0x76, 0x15, 0xC7, 0xC9, 0xAF, 0xE9, 0xDE, 0x10, 0x0C, 0x86, 0x2D, 0xED, 0x1C, 0x63, 0x98
.byte 0xA3, 0xB3, 0x8A, 0x68, 0xD2, 0x93, 0xEB, 0x38, 0xCA, 0x5F, 0x61, 0x18, 0xCE, 0x63, 0xBF, 0xEF
.byte 0xD9, 0xD4, 0xB6, 0xA2, 0x84, 0x9F, 0x80, 0x94, 0xAB, 0x07, 0xC1, 0x99, 0x23, 0x24, 0x32, 0xC7
.byte 0xD8, 0xBC, 0x2F, 0xAA, 0x50, 0x1B, 0xE3, 0x1A, 0x7A, 0x45, 0x33, 0x49, 0xA8, 0xF2, 0x38, 0x81
.byte 0xC7, 0xEF, 0x24, 0x4B, 0x8F, 0xA4, 0xDF, 0x3B, 0xAC, 0xA1, 0xD5, 0xD0, 0xC5, 0x07, 0x97, 0x9E
.byte 0xC3, 0xC6, 0x48, 0x13, 0xE1, 0x2C, 0x2D, 0x5C, 0x71, 0x60, 0xA5, 0x19, 0x53, 0xDE, 0x9B, 0x1A
.byte 0xCE, 0xBF, 0x66, 0x5D, 0x64, 0x45, 0x99, 0x11, 0xE6, 0x6E, 0xE1, 0xAC, 0x75, 0x78, 0x4A, 0x39
.byte 0x3E, 0x93, 0x4D, 0x20, 0xBF, 0x7A, 0x7C, 0x31, 0xDB, 0x22, 0x4B, 0x2F, 0x00, 0xE6, 0x49, 0xCF
.byte 0xA6, 0xB0, 0x2C, 0x0B, 0xF5, 0xC6, 0x1C, 0xDC, 0x35, 0xFE, 0x89, 0xAA, 0x77, 0xD4, 0xE4, 0xB6
.byte 0x67, 0x31, 0xD6, 0x27, 0xAC, 0x52, 0x58, 0x88, 0x75, 0xA3, 0xB7, 0x75, 0x8A, 0x01, 0x44, 0x31
.byte 0xB1, 0x71, 0x3C, 0xA7, 0x38, 0x59, 0x83, 0x6D, 0x57, 0x0C, 0x18, 0xCF, 0xE1, 0xFC, 0x85, 0x48
.byte 0x2E, 0x5B, 0x70, 0xDA, 0xAE, 0xC9, 0x62, 0x23, 0x6D, 0x1A, 0x99, 0xF7, 0x1B, 0xDE, 0x28, 0xCD
.byte 0x50, 0x65, 0x74, 0x88, 0xBE, 0xF8, 0xF5, 0x16, 0x05, 0x0D, 0xE5, 0xE6, 0x0A, 0x6B, 0x2F, 0x38
.byte 0xC7, 0x9F, 0x12, 0x76, 0x68, 0x75, 0x9A, 0xD5, 0x90, 0x33, 0xCD, 0xAC, 0x12, 0xF6, 0x79, 0x62
.byte 0x5B, 0xEE, 0xEA, 0x1A, 0xE6, 0xE0, 0x31, 0xEB, 0xED, 0x16, 0xD2, 0xF7, 0x82, 0x01, 0x30, 0x49
.byte 0xA0, 0x43, 0xBF, 0x09, 0xB8, 0x59, 0xDF, 0x48, 0x8D, 0xAC, 0xF5, 0x9F, 0xA3, 0x6E, 0x02, 0xFE
.byte 0x5D, 0xEC, 0x19, 0x43, 0xCD, 0x4A, 0x2F, 0xBA, 0x61, 0x01, 0xB2, 0xE3, 0x02, 0xE2, 0x2D, 0xA3
.byte 0x25, 0xEC, 0xAC, 0xDE, 0x46, 0x8C, 0x27, 0xD4, 0x39, 0x1C, 0x73, 0xDC, 0x8B, 0x76, 0xDB, 0xE8
.byte 0x62, 0xF4, 0x2C, 0x30, 0x3F, 0x5C, 0xEA, 0xA0, 0x5D, 0x9D, 0x84, 0x60, 0x80, 0xB1, 0x04, 0xA6
.byte 0x9E, 0xB1, 0x85, 0xE5, 0x3D, 0xAC, 0xB9, 0x76, 0xC9, 0x2D, 0x53, 0x55, 0xA3, 0x2E, 0x3E, 0x06
.byte 0x23, 0x6A, 0x36, 0x62, 0xC7, 0x21, 0x03, 0x25, 0xBE, 0x87, 0x86, 0x3F, 0x39, 0x8A, 0xE5, 0xD8
.byte 0x3C, 0x6A, 0xBD, 0x7A, 0x17, 0x76, 0xF0, 0xE1, 0xA3, 0x44, 0x36, 0x47, 0x72, 0x75, 0x4D, 0x96
.byte 0xE0, 0x83, 0xF8, 0xA7, 0xA4, 0xFC, 0xCC, 0x63, 0x83, 0x52, 0xA2, 0xBD, 0xDD, 0x88, 0x95, 0x19
.byte 0xF3, 0x52, 0x93, 0x0B, 0xC9, 0x84, 0xEC, 0x6D, 0xC8, 0x23, 0xB4, 0x3B, 0x98, 0x02, 0xD1, 0x79
.byte 0x85, 0xCA, 0x20, 0x2A, 0xC6, 0xEC, 0x8E, 0x4A, 0x3F, 0x31, 0x08, 0x1C, 0xBA, 0x9D, 0x36, 0xAD
.byte 0xF0, 0xC9, 0xB8, 0xBA, 0x4E, 0xA5, 0x27, 0x17, 0xC8, 0xDC, 0x52, 0x61, 0xDE, 0x24, 0xDA, 0x63
.byte 0xEE, 0xFB, 0x8E, 0xB5, 0xE8, 0x1D, 0x00, 0x27, 0x4E, 0x08, 0x44, 0x08, 0xA5, 0x7A, 0xB6, 0x96
.byte 0x44, 0x6F, 0x50, 0x92, 0x14, 0x77, 0xA9, 0xDD, 0x53, 0xFC, 0x3F, 0x31, 0x20, 0x19, 0x95, 0x0F
.byte 0x15, 0x24, 0xC4, 0xFD, 0x41, 0xC4, 0x24, 0x90, 0xCC, 0x69, 0x99, 0x72, 0xE3, 0x4F, 0x09, 0x28
.byte 0xBF, 0x59, 0xBB, 0xD3, 0xD1, 0x64, 0xB1, 0x25, 0x61, 0xF0, 0x57, 0x81, 0x0A, 0xEC, 0x91, 0x1F
.byte 0x11, 0x56, 0x1C, 0x52, 0x1B, 0x41, 0xE3, 0xE8, 0xAB, 0x7C, 0x5A, 0x8F, 0xCC, 0x64, 0xB7, 0x8C
.byte 0xBD, 0x72, 0x5F, 0x8E, 0xD7, 0x11, 0xB4, 0x38, 0x01, 0x0B, 0xBA, 0x0B, 0xF8, 0x4B, 0x2B, 0x09
.byte 0xA2, 0x48, 0x5C, 0xBD, 0x89, 0x3F, 0xA5, 0x34, 0xBC, 0x00, 0xC3, 0x89, 0x64, 0x7B, 0x15, 0x22
.byte 0xED, 0x75, 0xB1, 0xC4, 0x86, 0x65, 0xFD, 0x88, 0x70, 0xB7, 0x94, 0x68, 0x03, 0xBF, 0x71, 0xA5
.byte 0x07, 0xCE, 0x63, 0x91, 0x0E, 0x08, 0xC6, 0xCA, 0x09, 0x8A, 0x54, 0x6D, 0x05, 0x69, 0x90, 0xF2
.byte 0xDF, 0x41, 0xB7, 0x66, 0xA6, 0xB4, 0xEE, 0x16, 0x6C, 0x83, 0x7F, 0x70, 0x43, 0xF1, 0x16, 0x4A
.byte 0xBF, 0x79, 0xDC, 0xCD, 0x82, 0xA2, 0x98, 0x8B, 0x2C, 0xED, 0xF9, 0x32, 0x57, 0x89, 0x24, 0x36
.byte 0xCA, 0xDC, 0x9C, 0x71, 0x91, 0x8B, 0x88, 0xFE, 0x0F, 0x07, 0x6E, 0x52, 0xF9, 0x84, 0x9C, 0xB8
.byte 0xFE, 0x79, 0x86, 0x80, 0x1B, 0x1F, 0x0B, 0x48, 0x0C, 0x05, 0x7A, 0x63, 0x8E, 0x9F, 0x9A, 0x59
.byte 0x7C, 0x37, 0xCB, 0x0D, 0xC3, 0x53, 0x0C, 0xD2, 0x5B, 0x7A, 0x24, 0x54, 0xFF, 0xC1, 0x0D, 0xFE
.byte 0x3A, 0x94, 0x7E, 0x56, 0xB3, 0x8A, 0x9F, 0xC0, 0x8F, 0x1A, 0x24, 0x1E, 0xB9, 0xBF, 0x78, 0x36
.byte 0xF6, 0x43, 0x44, 0xB9, 0x97, 0x50, 0x8C, 0xF2, 0xCB, 0xB0, 0x46, 0xCB, 0x72, 0x53, 0xC9, 0xAD
.byte 0xE8, 0x47, 0x04, 0x9B, 0xD1, 0xA3, 0x5C, 0x61, 0xBD, 0x81, 0x80, 0x77, 0x40, 0xF8, 0xAD, 0x37
.byte 0x3C, 0xF1, 0xF0, 0xD3, 0x42, 0x7D, 0xC5, 0x0D, 0x2D, 0x0C, 0xD8, 0xA0, 0x60, 0xA1, 0x4D, 0x48
.byte 0xE8, 0x51, 0xE4, 0xBA, 0xF4, 0x41, 0x1B, 0xB2, 0xC2, 0x9B, 0x2A, 0x03, 0x94, 0xD8, 0x3A, 0xD0
.byte 0xC9, 0x2A, 0xA4, 0x0B, 0xA7, 0x69, 0x19, 0xD5, 0x76, 0xF1, 0x75, 0xD6, 0x92, 0xC3, 0x1F, 0x7B
.byte 0x14, 0x03, 0x36, 0x09, 0x44, 0x52, 0xBC, 0x07, 0xEE, 0xE6, 0x0A, 0x82, 0xBE, 0x44, 0x53, 0x88
.byte 0x6F, 0xF7, 0x94, 0x17, 0x61, 0xAD, 0xED, 0xD8, 0x9F, 0x63, 0xAF, 0x32, 0x26, 0xCE, 0xAE, 0x3B
.byte 0xD2, 0xE4, 0x44, 0x17, 0x36, 0x00, 0x1E, 0x25, 0xE7, 0x28, 0xA8, 0xA5, 0x6D, 0xFB, 0x2E, 0xDC
.byte 0xF3, 0xC2, 0xF4, 0x55, 0x70, 0xE1, 0x2D, 0x0F, 0x44, 0xDC, 0x41, 0x6A, 0xAB, 0xEF, 0xA5, 0x7D
.byte 0xD4, 0xEA, 0x94, 0x0B, 0xEB, 0xB3, 0x30, 0xD2, 0xDC, 0xD9, 0x78, 0x49, 0xD5, 0xA6, 0x26, 0xC8
.byte 0x68, 0x1A, 0x1E, 0xD9, 0xFC, 0x4B, 0xE8, 0x40, 0x28, 0x2A, 0xAB, 0xD3, 0x19, 0x51, 0x51, 0xEE
.byte 0x3C, 0xE5, 0xF9, 0x27, 0x98, 0x2A, 0xFA, 0x74, 0x03, 0x72, 0xBE, 0xD8, 0x18, 0xE4, 0xA1, 0x81
.byte 0xFF, 0xBF, 0x5B, 0xFB, 0x0B, 0x43, 0x3C, 0x34, 0x6D, 0xE7, 0x07, 0x87, 0x39, 0x58, 0x75, 0x75
.byte 0x3E, 0x6F, 0x9C, 0xD7, 0x9A, 0x96, 0x4B, 0x9D, 0x08, 0x09, 0x76, 0x21, 0xEE, 0x17, 0xA3, 0xED
.byte 0xD7, 0xFE, 0xE8, 0xE2, 0x42, 0x24, 0x16, 0xB0, 0x0C, 0x1E, 0x37, 0x45, 0x77, 0xAD, 0xBA, 0xB6
.byte 0x1D, 0x56, 0x8D, 0xB7, 0xED, 0xD8, 0x55, 0xF6, 0xE2, 0xCB, 0x18, 0xD0, 0xE3, 0xBC, 0xBE, 0xBA
.byte 0xBB, 0xA7, 0x9D, 0xFD, 0xCB, 0xB4, 0xAD, 0xD8, 0xD2, 0xE5, 0x1D, 0x4A, 0x92, 0xD8, 0x00, 0xAF
.byte 0x2F, 0x8D, 0x67, 0x1C, 0x66, 0xBC, 0x13, 0x48, 0x87, 0x2B, 0x19, 0x6A, 0xE7, 0xD7, 0x24, 0xA3
.byte 0x7E, 0xC2, 0xA0, 0x4A, 0x76, 0x4E, 0x23, 0x49, 0x33, 0x41, 0x93, 0xC5, 0x19, 0x94, 0x75, 0x49
.byte 0x22, 0xDD, 0x66, 0x88, 0x99, 0x79, 0xD1, 0x21, 0xA5, 0xEB, 0x8B, 0x8D, 0xC3, 0xB0, 0x30, 0x42
.byte 0x72, 0xD0, 0x8C, 0xE9, 0x1E, 0xB0, 0x32, 0x52, 0xF1, 0xC5, 0x18, 0x0B, 0x5A, 0x8D, 0x54, 0x7C
.byte 0x6A, 0xBA, 0x04, 0x04, 0x34, 0xD6, 0x25, 0xD9, 0xC1, 0xB1, 0x66, 0x84, 0x62, 0x97, 0xC6, 0xD5
.byte 0x67, 0x53, 0xBE, 0x86, 0x03, 0xF0, 0xD8, 0xF5, 0xB6, 0xF0, 0x00, 0x10, 0x7E, 0x55, 0x8C, 0xE9
.byte 0x10, 0x91, 0xEE, 0x44, 0x67, 0x13, 0x1E, 0x29, 0xC5, 0x84, 0xAE, 0x27, 0x1B, 0x74, 0xFD, 0x83
.byte 0xC8, 0xBB, 0x0A, 0xCC, 0xAC, 0xE3, 0xC1, 0x62, 0xD4, 0xC2, 0x72, 0x53, 0x18, 0xFF, 0x3D, 0x28
.byte 0x90, 0x2B, 0x6D, 0xF8, 0x3F, 0x8B, 0x21, 0x04, 0x0F, 0xCF, 0x2C, 0x2B, 0x44, 0x29, 0xAF, 0x0D
.byte 0xE5, 0xB9, 0xD9, 0x91, 0x9D, 0x9B, 0xF3, 0x71, 0x5E, 0x66, 0xC5, 0x76, 0x65, 0x02, 0x9F, 0xF6
.byte 0x2D, 0x0C, 0xEF, 0x6D, 0x97, 0x11, 0x72, 0xA7, 0xE1, 0x9E, 0xD2, 0x25, 0xC8, 0x81, 0x33, 0xAD
.byte 0x3B, 0x0C, 0x3E, 0xD9, 0xA8, 0x32, 0x4B, 0x06, 0x98, 0x10, 0x7D, 0xFE, 0x12, 0x1C, 0xF5, 0x40
.byte 0x28, 0xE4, 0xAE, 0xBF, 0xF6, 0x20, 0x66, 0xD7, 0xBE, 0x39, 0xFD, 0x87, 0xBB, 0x30, 0x34, 0xF7
.byte 0x3C, 0x73, 0xD0, 0xE5, 0xA5, 0x1B, 0xEB, 0x3D, 0x2C, 0x68, 0x3C, 0x3F, 0x85, 0x31, 0x80, 0xAD
.byte 0x16, 0x2E, 0x6D, 0x0C, 0x4E, 0xD3, 0xE3, 0x0D, 0x0D, 0xE0, 0x94, 0xC8, 0x10, 0xC9, 0xBF, 0x4D
.byte 0x3C, 0x90, 0x32, 0xE2, 0xAC, 0x1E, 0x1F, 0xD8, 0x87, 0x5B, 0x18, 0x0C, 0x8D, 0x98, 0xB9, 0xA3
.byte 0xC6, 0x27, 0xAF, 0x15, 0xFA, 0x92, 0x22, 0x08, 0x73, 0xB7, 0xD0, 0x84, 0x81, 0x90, 0xD1, 0xBE
.byte 0x21, 0x04, 0xA0, 0xCD, 0x23, 0xC0, 0xA6, 0xAA, 0x1B, 0xBE, 0xB7, 0xA9, 0x56, 0x71, 0x4C, 0x1D
.byte 0x98, 0xFB, 0x32, 0x93, 0x8E, 0x55, 0x9B, 0x01, 0x0C, 0x6C, 0x85, 0x8E, 0xFD, 0x57, 0x4C, 0x1E
.byte 0x5C, 0xEC, 0xEC, 0x7F, 0xAC, 0x92, 0x2A, 0xC8, 0x51, 0xE2, 0x71, 0xA7, 0x53, 0xBE, 0xC5, 0xEB
.byte 0xBA, 0xF7, 0x7E, 0x48, 0x4C, 0x1A, 0x49, 0x59, 0x86, 0xCF, 0xE7, 0x83, 0x27, 0x33, 0xA2, 0x83
.byte 0x20, 0x8E, 0x03, 0xCC, 0x21, 0x2D, 0x95, 0x72, 0x0F, 0x07, 0x1A, 0x63, 0xC5, 0xDF, 0x4E, 0x7F
.byte 0xD7, 0xCD, 0xC7, 0x24, 0xE7, 0x11, 0x7D, 0x6E, 0xE1, 0x65, 0xF2, 0x08, 0x99, 0x94, 0x8B, 0xB9
.byte 0x23, 0x8E, 0x86, 0x44, 0xBC, 0x1C, 0xB6, 0xCC, 0x23, 0xD1, 0x2F, 0xE9, 0xB0, 0x7E, 0x68, 0x87
.byte 0x4C, 0x30, 0xAB, 0x33, 0x42, 0x29, 0xA2, 0x23, 0x8E, 0x94, 0x2C, 0x28, 0x29, 0xB8, 0xE1, 0x4C
.byte 0x47, 0x68, 0x91, 0x03, 0x84, 0x47, 0xD0, 0xA8, 0x18, 0x00, 0x91, 0xC9, 0x7F, 0xF9, 0x51, 0xCB
.byte 0x2A, 0xFC, 0xFE, 0x6C, 0x26, 0xA1, 0x90, 0xB4, 0x35, 0xBC, 0xDC, 0x5E, 0x74, 0xBE, 0xAB, 0xBC
.byte 0x26, 0x3C, 0xC0, 0xAB, 0x84, 0x90, 0x53, 0x9D, 0x91, 0xE4, 0x66, 0x10, 0xDE, 0xB8, 0xDB, 0x08
.byte 0xB4, 0xDA, 0x75, 0xDA, 0x7B, 0x05, 0x8F, 0xB1, 0xC2, 0x6C, 0x10, 0x37, 0x2B, 0xBB, 0xF3, 0x52
.byte 0xF8, 0xB3, 0xFD, 0x7C, 0x43, 0x51, 0x19, 0xD5, 0x35, 0x80, 0xE5, 0x14, 0x38, 0xC0, 0x1C, 0xED
.byte 0x9B, 0x91, 0xC8, 0x16, 0x97, 0x58, 0xC7, 0x59, 0xC5, 0xD7, 0x90, 0xF0, 0x93, 0x83, 0x42, 0x8B
.byte 0x36, 0x40, 0x08, 0x7A, 0x91, 0x22, 0x4F, 0xC7, 0xA3, 0x34, 0xDC, 0xDB, 0xF5, 0xF8, 0xC9, 0x90
.byte 0x8A, 0x92, 0xA7, 0x21, 0xEA, 0x6E, 0x7B, 0xB0, 0x46, 0x0B, 0xA0, 0xDA, 0x8E, 0xE3, 0x65, 0xC5
.byte 0x24, 0x6E, 0x3F, 0xB5, 0x90, 0x8F, 0x7D, 0x33, 0xC3, 0x59, 0x0F, 0xB9, 0x52, 0xD8, 0x49, 0xDD
.byte 0x6B, 0xF0, 0xFF, 0x56, 0x5F, 0x7A, 0x06, 0xA6, 0x85, 0xA7, 0x80, 0x14, 0x8A, 0xE6, 0xDA, 0xAE
.byte 0x54, 0x19, 0x64, 0xE4, 0xA9, 0xE2, 0x18, 0x6C, 0x3C, 0x27, 0x26, 0x8F, 0x00, 0x70, 0x6C, 0x6B
.byte 0x61, 0x6B, 0xC1, 0xC0, 0xE5, 0xC7, 0x67, 0x6B, 0x6F, 0xE8, 0x80, 0xF9, 0xCE, 0x5A, 0xA8, 0x23
.byte 0x73, 0x0D, 0x08, 0x1C, 0xF0, 0x20, 0x89, 0x2C, 0x47, 0xB0, 0xBC, 0x47, 0x20, 0x28, 0xB3, 0x81
.byte 0x94, 0x74, 0x41, 0x79, 0x3C, 0xA9, 0xE5, 0xAB, 0x91, 0x65, 0xA5, 0x60, 0xBF, 0x4E, 0x84, 0x33
.byte 0x5B, 0x8C, 0x50, 0x4C, 0xAC, 0xDA, 0x79, 0xF4, 0x8A, 0x35, 0x3C, 0xAA, 0x5D, 0xEF, 0x2B, 0xF2
.byte 0x64, 0x6D, 0x6C, 0xA0, 0x17, 0x51, 0x4C, 0xA8, 0xB6, 0xF1, 0x09, 0x76, 0x3F, 0x8D, 0xA9, 0x9B
.byte 0x1A, 0xFA, 0xE7, 0xC7, 0xD4, 0x60, 0xBB, 0x5E, 0x96, 0xF8, 0x09, 0xF4, 0xE7, 0x34, 0xE6, 0x4C
.byte 0xA2, 0x52, 0xED, 0xB9, 0xA3, 0x39, 0x62, 0x5A, 0x2A, 0x6B, 0xD0, 0x6A, 0xF8, 0x7A, 0x05, 0x12
.byte 0x74, 0xED, 0xD9, 0x48, 0x4E, 0x95, 0xA7, 0xE4, 0x8D, 0xB0, 0xD8, 0x75, 0xE5, 0xBE, 0xC2, 0x87
.byte 0x10, 0xAF, 0x41, 0xB4, 0xE8, 0xA3, 0x0E, 0x13, 0x0E, 0xDF, 0x7D, 0x07, 0x59, 0x83, 0x1A, 0xCD
.byte 0x70, 0xF4, 0x16, 0xBE, 0x89, 0xBE, 0xA3, 0x17, 0x6E, 0x7B, 0x8D, 0x54, 0x39, 0x4F, 0xDB, 0x4A
.byte 0xFE, 0x1C, 0xFE, 0xE7, 0xC0, 0x0D, 0xFA, 0xCE, 0xEC, 0x77, 0xD5, 0x46, 0xFA, 0xF0, 0x14, 0x6B
.byte 0xE4, 0x2A, 0x29, 0x6E, 0xE9, 0xCC, 0x85, 0x57, 0x48, 0x13, 0xAC, 0x82, 0x63, 0x88, 0xCC, 0x62
.byte 0xA5, 0xCB, 0x49, 0x65, 0xD9, 0x43, 0x33, 0xC5, 0xBB, 0x09, 0x0B, 0xB6, 0xF9, 0x1F, 0x21, 0xDD
.byte 0x4A, 0x4B, 0x4B, 0x33, 0x18, 0xD1, 0x8B, 0x60, 0xE4, 0x37, 0xE3, 0x48, 0xBF, 0xAF, 0xAA, 0x65
.byte 0x7B, 0xF3, 0xCA, 0x54, 0x37, 0xFE, 0x1A, 0xF2, 0x07, 0x25, 0xA9, 0x01, 0x45, 0xCA, 0xDF, 0x8F
.byte 0x16, 0x2B, 0xC3, 0x2E, 0xFD, 0x4E, 0x8F, 0xE2, 0x86, 0x72, 0x2A, 0x46, 0x22, 0xD4, 0xAB, 0x9D
.byte 0xC7, 0x75, 0xF2, 0xFE, 0x73, 0x0C, 0xF1, 0x7B, 0x32, 0x9A, 0x7D, 0x77, 0x65, 0x5C, 0x07, 0x7B
.byte 0x88, 0xCA, 0xAA, 0x85, 0x19, 0x39, 0x67, 0x9F, 0xAB, 0x91, 0xE6, 0xCD, 0x65, 0x91, 0x6B, 0x2C
.byte 0x06, 0x5D, 0x2B, 0x7A, 0x6A, 0x1D, 0xF6, 0x9C, 0xB7, 0x73, 0x14, 0x1D, 0xD0, 0x1B, 0x98, 0x58
.byte 0xE6, 0x42, 0xDD, 0xFF, 0x7C, 0x44, 0x9F, 0x27, 0xD5, 0x85, 0xF5, 0x3A, 0x16, 0x61, 0x67, 0x1D
.byte 0xBF, 0x93, 0x98, 0x2A, 0xB0, 0x8E, 0xC6, 0x68, 0x02, 0xDA, 0x85, 0xD2, 0xF5, 0x1E, 0x2A, 0xDB
.byte 0x61, 0x07, 0xDB, 0xDD, 0x4B, 0x7A, 0x05, 0x21, 0xFF, 0xFB, 0x5C, 0x16, 0x5D, 0xC4, 0x34, 0x1D
.byte 0x57, 0xCC, 0x47, 0x08, 0x5B, 0x0D, 0x71, 0x5D, 0xE8, 0xF7, 0x2F, 0xDE, 0x16, 0x5A, 0xBA, 0x77
.byte 0x61, 0x95, 0x55, 0xAD, 0x10, 0x5A, 0xCF, 0x10, 0x56, 0x2B, 0x26, 0xB3, 0xF0, 0x5A, 0xD1, 0x48
.byte 0x27, 0x18, 0x50, 0x82, 0x25, 0xC2, 0xDF, 0x0E, 0xB9, 0x0F, 0xEC, 0xD0, 0x69, 0xA6, 0x47, 0xCB
.byte 0x3C, 0x9D, 0x79, 0x4C, 0xF8, 0x48, 0x5C, 0x4E, 0x74, 0x83, 0x02, 0x64, 0xDD, 0xD3, 0xAC, 0x05
.byte 0xEB, 0xFD, 0x87, 0x11, 0xC0, 0x66, 0x20, 0x7A, 0x76, 0x0C, 0x4A, 0xDF, 0xB3, 0x92, 0xAB, 0xEF
.byte 0x2F, 0x24, 0x3B, 0x27, 0x6D, 0x98, 0x76, 0xE1, 0x1B, 0x78, 0x46, 0xF9, 0x4C, 0xF3, 0xFE, 0x38
.byte 0xF1, 0x85, 0x4A, 0xB1, 0xEC, 0x6A, 0x2C, 0x62, 0x77, 0x76, 0x42, 0x2A, 0x09, 0xED, 0x19, 0x38
.byte 0x11, 0x54, 0x60, 0x7E, 0xED, 0xD6, 0x60, 0x08, 0x4F, 0xA7, 0x02, 0x9C, 0x9B, 0x00, 0xD4, 0x8C
.byte 0x86, 0x1F, 0x3E, 0x73, 0x8A, 0x6A, 0xD5, 0x01, 0xE1, 0x18, 0x2B, 0xEA, 0x05, 0x44, 0x23, 0x16
.byte 0x99, 0x83, 0x95, 0x86, 0x59, 0xF6, 0x8F, 0xA9, 0x9D, 0x92, 0x45, 0x38, 0x93, 0x1A, 0xC5, 0x19
.byte 0x39, 0x03, 0x8D, 0xC3, 0x6E, 0x63, 0xC5, 0x50, 0x7B, 0xF0, 0x3B, 0x80, 0x35, 0x5E, 0x97, 0xCE
.byte 0xE2, 0x2C, 0x55, 0x3C, 0x23, 0xE5, 0xE5, 0xC0, 0x77, 0x2B, 0xF9, 0x0B, 0x45, 0xBE, 0x25, 0x7F
.byte 0xC2, 0xB2, 0x42, 0x31, 0x15, 0x07, 0x81, 0x90, 0xF8, 0xBC, 0x10, 0x2D, 0x1B, 0xA7, 0xFC, 0xFD
.byte 0xD4, 0x52, 0x3A, 0xF7, 0x38, 0x1F, 0xB8, 0xB0, 0x4A, 0xB1, 0xBB, 0x90, 0x70, 0xE0, 0x0F, 0x33
.byte 0x92, 0x51, 0x64, 0xA8, 0x59, 0xE6, 0x38, 0x52, 0xA3, 0x49, 0x7F, 0xBE, 0xF1, 0x7C, 0xBC, 0xC6
.byte 0xCF, 0xF6, 0xBD, 0x07, 0x16, 0x76, 0xB7, 0x60, 0x28, 0x73, 0xF1, 0x98, 0x53, 0x00, 0xCC, 0xE6
.byte 0x52, 0x30, 0x8E, 0xAC, 0x16, 0xC7, 0xFE, 0xBA, 0x10, 0x7E, 0x78, 0x01, 0xFA, 0x35, 0xC7, 0xCA
.byte 0x2B, 0x85, 0xD1, 0x41, 0xFB, 0x89, 0xA2, 0x24, 0xFC, 0x93, 0xBC, 0x50, 0x94, 0x89, 0x36, 0xE6
.byte 0xB9, 0xC5, 0x92, 0xD0, 0x8C, 0x90, 0x8A, 0x9D, 0x0F, 0x03, 0x9F, 0x0A, 0x38, 0x67, 0xD4, 0x64
.byte 0xED, 0xA6, 0xA6, 0xE8, 0x2F, 0x49, 0x0D, 0x2C, 0xDD, 0xCA, 0x7C, 0x71, 0x53, 0xB3, 0x57, 0x0C
.byte 0x79, 0xE9, 0xDD, 0x05, 0x7A, 0x68, 0xA3, 0x89, 0x6B, 0x42, 0x93, 0xA4, 0xA9, 0x67, 0x09, 0x96
.byte 0x0D, 0xAF, 0x7F, 0x3D, 0xF8, 0x8C, 0x6A, 0xD5, 0x57, 0xE6, 0x47, 0xAA, 0x9A, 0x9E, 0xB6, 0x14
.byte 0x88, 0x94, 0x1A, 0x03, 0xFD, 0xBD, 0x8D, 0x69, 0xFF, 0x20, 0x0D, 0xA9, 0x88, 0x16, 0x40, 0x96
.byte 0xC6, 0xC0, 0xD4, 0xBE, 0x4D, 0x3E, 0x94, 0xA4, 0x25, 0xDB, 0x4E, 0xC0, 0x7A, 0x05, 0xD4, 0x03
.byte 0x9A, 0xEE, 0x06, 0x97, 0xAB, 0x93, 0x00, 0xAB, 0xB4, 0x0D, 0x55, 0x3D, 0x24, 0x96, 0xD4, 0xEB
.byte 0x56, 0xA8, 0xA9, 0xA4, 0xE7, 0x3E, 0x48, 0x0D, 0x1A, 0x97, 0xCD, 0x94, 0x9C, 0xA1, 0x97, 0x36
.byte 0x90, 0x9D, 0xCE, 0x3C, 0x31, 0xCE, 0xE7, 0xE6, 0xDC, 0x3D, 0x23, 0x00, 0xD3, 0xF8, 0xEB, 0x29
.byte 0xA0, 0x95, 0xCD, 0x88, 0xD4, 0x16, 0x95, 0xEE, 0xAD, 0x62, 0x82, 0x4A, 0x04, 0x1A, 0x81, 0x94
.byte 0xB8, 0x4F, 0xD1, 0xE9, 0x1D, 0xB8, 0xCF, 0xF9, 0xF6, 0xF3, 0xFA, 0xC9, 0xEB, 0xE6, 0xF3, 0x8C
.byte 0x7C, 0xC1, 0x14, 0x50, 0xD7, 0xAA, 0x3F, 0x85, 0x0D, 0xC1, 0xCF, 0x12, 0xDB, 0x51, 0xA7, 0x93
.byte 0xA0, 0x78, 0x7D, 0xBD, 0x31, 0x4D, 0xB7, 0x27, 0x40, 0xB2, 0xF0, 0x2C, 0x99, 0xE4, 0xB8, 0x15
.byte 0xA5, 0xCD, 0x66, 0x7D, 0x78, 0xA5, 0x02, 0x85, 0x67, 0xD2, 0x97, 0x43, 0x23, 0x3E, 0xD7, 0xC4
.byte 0xB7, 0x55, 0x82, 0xE8, 0xA2, 0x39, 0x0F, 0xE3, 0xEC, 0xFF, 0x0F, 0x85, 0xE3, 0xC8, 0x9B, 0x89
.byte 0x96, 0x02, 0x06, 0x0E, 0xA8, 0x09, 0x93, 0x10, 0xDC, 0x2B, 0x53, 0xFF, 0x6A, 0x2B, 0xC4, 0x21
.byte 0x80, 0x46, 0x09, 0x22, 0x80, 0x19, 0x06, 0x6C, 0x18, 0x15, 0xF2, 0xFC, 0xDD, 0x8E, 0x86, 0x74
.byte 0x91, 0x8C, 0x82, 0x3A, 0x95, 0x16, 0x4A, 0x72, 0x42, 0x9E, 0x71, 0xAC, 0xC9, 0x35, 0xCE, 0x49
.byte 0x7C, 0xD8, 0x6C, 0xFC, 0xF1, 0x72, 0x69, 0x0A, 0x87, 0x5C, 0x06, 0x65, 0xEA, 0x8C, 0xD9, 0x7C
.byte 0x19, 0x5C, 0xB6, 0xAF, 0x72, 0x00, 0x21, 0xB4, 0x9E, 0x93, 0x61, 0x67, 0xC9, 0x2F, 0xB1, 0x45
.byte 0x08, 0x1D, 0x42, 0xF9, 0x8F, 0xAB, 0x03, 0x17, 0x07, 0x0A, 0x7D, 0xF2, 0x97, 0x57, 0x6E, 0xB0
.byte 0xB3, 0x24, 0x60, 0x26, 0x24, 0x81, 0xDB, 0xC2, 0x15, 0x3C, 0x2A, 0xDE, 0x6C, 0xDB, 0x24, 0x74
.byte 0xF9, 0x66, 0x6D, 0x89, 0x11, 0x71, 0xA1, 0x19, 0x7B, 0x1F, 0x0B, 0x12, 0x76, 0x79, 0xC3, 0x2A
.byte 0x9D, 0x23, 0x51, 0xC2, 0xA5, 0x2C, 0x85, 0xBA, 0x68, 0xAF, 0x98, 0xD5, 0x8B, 0xBC, 0x49, 0x85
.byte 0x23, 0xB7, 0x0F, 0x34, 0x29, 0xB0, 0x4D, 0xA4, 0xCF, 0x59, 0xB7, 0x46, 0xD2, 0x7B, 0x71, 0x70
.byte 0x9E, 0xC2, 0x32, 0x43, 0xEE, 0xB7, 0xFE, 0x57, 0x67, 0x96, 0x2D, 0xF3, 0x53, 0x76, 0x78, 0x76
.byte 0x2E, 0x87, 0xAB, 0x57, 0x38, 0xF9, 0xFC, 0x08, 0x52, 0xB3, 0x4E, 0x24, 0x2E, 0xC0, 0x95, 0xCD
.byte 0x82, 0xC7, 0x11, 0x71, 0x7E, 0x0F, 0xC9, 0xE6, 0xA6, 0xF6, 0xD9, 0xFA, 0x6D, 0x52, 0x71, 0x9C
.byte 0xDA, 0x1D, 0xF3, 0x13, 0x16, 0xF0, 0x1B, 0x68, 0xA3, 0x6A, 0x8D, 0xD2, 0x2A, 0x22, 0xA0, 0xAD
.byte 0xEA, 0xB2, 0x1E, 0x69, 0xC2, 0xE8, 0x4F, 0x69, 0xDF, 0x29, 0x63, 0x4C, 0x7C, 0xD5, 0xE8, 0x56
.byte 0xF2, 0xDC, 0x69, 0x08, 0xCC, 0x85, 0x71, 0x70, 0xEF, 0xFF, 0x43, 0x19, 0x22, 0xE4, 0xC6, 0x0C
.byte 0x96, 0xE5, 0x75, 0x59, 0xCE, 0xC5, 0xC2, 0xAD, 0xEE, 0x26, 0xF9, 0x6A, 0xFB, 0xE2, 0xC1, 0xED
.byte 0xBF, 0x2B, 0xF6, 0x8C, 0xB0, 0x67, 0xFD, 0x9F, 0x67, 0x40, 0xB9, 0x89, 0x25, 0x7F, 0x95, 0xBB
.byte 0x65, 0x0B, 0x14, 0x33, 0xD0, 0xD7, 0xE0, 0xBE, 0xFD, 0xDA, 0x29, 0xF8, 0xBD, 0xEA, 0xE6, 0x7D
.byte 0x15, 0xDC, 0x09, 0xC6, 0x44, 0x06, 0x66, 0xAB, 0x47, 0x1F, 0x34, 0x6C, 0x9F, 0xCA, 0x28, 0x04
.byte 0xD5, 0x3D, 0x38, 0xA5, 0x14, 0x19, 0x64, 0x11, 0xF4, 0x8D, 0x0A, 0xB2, 0x78, 0xF0, 0x2F, 0x8E
.byte 0xCC, 0x38, 0x54, 0x10, 0x3F, 0xBA, 0xBC, 0x86, 0xD9, 0xF1, 0xF3, 0x79, 0xBB, 0x1B, 0x7D, 0x91
.byte 0x59, 0xB6, 0x36, 0x6D, 0xCF, 0x9B, 0x7F, 0xC4, 0x28, 0x89, 0x76, 0xA0, 0x79, 0xA5, 0x2E, 0x46
.byte 0xDE, 0x83, 0x57, 0x1D, 0x3D, 0x13, 0xA4, 0x17, 0x04, 0x98, 0x90, 0xC0, 0xB3, 0x0E, 0x51, 0x0D
.byte 0xC4, 0x88, 0x7A, 0x94, 0x23, 0xFA, 0x58, 0x4C, 0x84, 0xCE, 0xEC, 0xFD, 0x74, 0x1B, 0x44, 0x52
.byte 0x9E, 0x9B, 0x70, 0xDC, 0xAF, 0x14, 0xF3, 0xB4, 0xAD, 0x84, 0x75, 0x61, 0x92, 0xC6, 0x6E, 0x56
.byte 0x4F, 0xE9, 0xEB, 0x73, 0xE3, 0x43, 0xBF, 0x67, 0x12, 0xAC, 0x65, 0x86, 0xC8, 0xAA, 0xD8, 0x66
.byte 0x45, 0x48, 0x43, 0xF5, 0x5D, 0x36, 0xA9, 0x0A, 0xBA, 0x1E, 0x6B, 0x4D, 0xE5, 0xDA, 0xA4, 0x35
.byte 0xC3, 0x8F, 0xA8, 0xA7, 0xD3, 0x68, 0x0E, 0xE5, 0x15, 0x74, 0x6B, 0xDD, 0x1E, 0x44, 0x44, 0x64
.byte 0x8D, 0x87, 0x59, 0xEB, 0xBE, 0x03, 0xF6, 0x79, 0x22, 0x62, 0xC6, 0x07, 0x3C, 0x6A, 0x3D, 0xFF
.byte 0xFA, 0xE5, 0xA6, 0xCD, 0x4E, 0xB5, 0xB2, 0x63, 0x29, 0x1E, 0x41, 0x48, 0x63, 0x86, 0xAC, 0xF0
.byte 0x0E, 0x05, 0xDC, 0xCD, 0x09, 0xD2, 0x46, 0x2B, 0x34, 0x0D, 0x32, 0x70, 0x78, 0x6F, 0x70, 0x72
.byte 0x55, 0x17, 0x3F, 0xA4, 0xCC, 0xF2, 0x08, 0xF6, 0x11, 0x4A, 0x3E, 0x74, 0xD0, 0xEA, 0x65, 0xDF
.byte 0xF0, 0x41, 0xAC, 0xF9, 0x13, 0xF2, 0x24, 0x48, 0xFF, 0x57, 0xB9, 0x77, 0xC7, 0x29, 0xEA, 0x1D
.byte 0x40, 0x29, 0xC1, 0x0D, 0x1B, 0xCA, 0x03, 0x2D, 0x14, 0x41, 0xA1, 0xE5, 0x2C, 0x06, 0xC4, 0x1C
.byte 0x48, 0x70, 0x16, 0x5C, 0x62, 0x3B, 0xA4, 0x62, 0x93, 0x5E, 0xDA, 0x5A, 0x87, 0xC4, 0x78, 0xC8
.byte 0xEE, 0x3A, 0xD6, 0x0A, 0x04, 0xD9, 0x37, 0x18, 0x1B, 0xD8, 0xFD, 0x48, 0xDF, 0xC1, 0x65, 0x27
.byte 0x32, 0x7B, 0x83, 0x94, 0xB7, 0x28, 0xF7, 0x4A, 0x86, 0xD2, 0xA5, 0x0E, 0x96, 0x1D, 0xD7, 0x85
.byte 0x57, 0xAD, 0x8F, 0x5C, 0x87, 0xC6, 0x75, 0xA3, 0x9F, 0x73, 0xEC, 0x7F, 0x35, 0x51, 0xA6, 0x67
.byte 0xCD, 0x2A, 0xFC, 0x84, 0x53, 0xF3, 0xCE, 0xDA, 0xC5, 0x73, 0xE8, 0x5C, 0x91, 0xC0, 0xE1, 0xE8
.byte 0x6E, 0x70, 0x45, 0xF6, 0x37, 0xBA, 0x9A, 0xD7, 0x2D, 0x86, 0x56, 0x62, 0xD7, 0xFD, 0xCA, 0xA4
.byte 0x28, 0xC6, 0x29, 0x7B, 0xB9, 0xF7, 0x55, 0x7E, 0x6B, 0x3E, 0xDB, 0xFC, 0xFE, 0xBC, 0xE5, 0x6D
.byte 0x2D, 0x2A, 0x63, 0x64, 0xE5, 0xFD, 0x3B, 0x12, 0x84, 0x92, 0x75, 0x5B, 0x8F, 0x3F, 0x00, 0xB7
.byte 0x05, 0x2A, 0x32, 0xBF, 0x22, 0x88, 0x3E, 0x8D, 0xC6, 0x19, 0x8A, 0xC5, 0xD5, 0x70, 0x32, 0x03
.byte 0x9A, 0x96, 0x67, 0x80, 0x94, 0xA3, 0x93, 0x18, 0x35, 0x08, 0x74, 0xC4, 0x48, 0x74, 0x7C, 0x4E
.byte 0x9F, 0xAF, 0x0D, 0xC1, 0x37, 0x4B, 0x4F, 0xFE, 0x65, 0xD9, 0xC4, 0x3B, 0x49, 0xF7, 0x3E, 0xE4
.byte 0x8D, 0xA5, 0x64, 0x22, 0x49, 0xF7, 0x3A, 0x7E, 0x00, 0xAE, 0x43, 0x49, 0x23, 0xC0, 0x97, 0xC2
.byte 0x6F, 0xA4, 0x83, 0xA7, 0xF0, 0xD2, 0xA6, 0x55, 0xAC, 0x6A, 0x90, 0xF6, 0x61, 0xCF, 0xDA, 0xEF
.byte 0x74, 0x3F, 0x11, 0xBD, 0x37, 0x4C, 0x3C, 0x38, 0xFA, 0x80, 0x81, 0x1E, 0x40, 0x18, 0xE0, 0xAF
.byte 0xBD, 0x64, 0x57, 0xAE, 0x37, 0xFD, 0x04, 0xE4, 0x67, 0x95, 0xDA, 0xC9, 0x64, 0xB5, 0xB9, 0xD8
.byte 0xF5, 0xCB, 0x96, 0x2C, 0x17, 0xD3, 0x64, 0x12, 0x54, 0xE6, 0x30, 0x94, 0xFE, 0x11, 0x44, 0xBC
.byte 0x76, 0x9B, 0x6A, 0xAE, 0x99, 0x6E, 0x92, 0x00, 0x03, 0x6D, 0xCA, 0x67, 0x22, 0x84, 0x40, 0x17
.byte 0x4F, 0xD7, 0x44, 0x67, 0xAB, 0xA8, 0x79, 0xFF, 0x8E, 0xAA, 0x94, 0x8D, 0xBC, 0xD8, 0x49, 0x32
.byte 0x74, 0xB4, 0xE0, 0x0D, 0x22, 0x73, 0x0E, 0x26, 0xE0, 0xD9, 0x8E, 0x02, 0x5D, 0xCE, 0x1A, 0xAC
.byte 0xA6, 0x5E, 0x14, 0x51, 0x07, 0x8D, 0x51, 0x96, 0x38, 0xE5, 0x23, 0xF4, 0xBE, 0x6D, 0x26, 0x32
.byte 0x21, 0x07, 0x40, 0x44, 0x7A, 0x4E, 0x6A, 0x5A, 0x28, 0xF8, 0x5D, 0x85, 0xC7, 0x77, 0x32, 0x6E
.byte 0xD5, 0x46, 0xC0, 0xDC, 0xD4, 0x11, 0x72, 0x0C, 0xF6, 0x96, 0x00, 0xB4, 0x03, 0x27, 0xE7, 0x25
.byte 0x2F, 0x28, 0x69, 0xA9, 0x76, 0xD3, 0x04, 0x9F, 0xCC, 0x61, 0x24, 0x94, 0xD9, 0x56, 0x02, 0xAE
.byte 0x9C, 0xC2, 0x8B, 0x70, 0xD4, 0xFE, 0x7D, 0xCB, 0x94, 0x7D, 0x7F, 0x98, 0xA5, 0x67, 0xBD, 0xD4
.byte 0x8F, 0x26, 0x7E, 0x06, 0xFA, 0x83, 0xA5, 0xC7, 0xE5, 0xCA, 0x5B, 0xBE, 0x20, 0x5E, 0x6D, 0xBD
.byte 0x21, 0xF8, 0x2E, 0xF5, 0xF6, 0xAB, 0xC0, 0x8B, 0x29, 0x40, 0x23, 0xCF, 0xA8, 0xE0, 0xA3, 0x37
.byte 0x07, 0x22, 0x3E, 0x02, 0xA5, 0xE3, 0xC9, 0x8A, 0xAD, 0x25, 0x49, 0xCE, 0x83, 0xB6, 0x8C, 0xA4
.byte 0xAE, 0xBA, 0x99, 0xA5, 0x65, 0x5A, 0x30, 0x8F, 0x9A, 0x54, 0x5E, 0x42, 0x35, 0x02, 0x7A, 0x3C
.byte 0x24, 0xB8, 0x3E, 0xCA, 0x9C, 0x08, 0x55, 0x4A, 0x2D, 0x9E, 0x19, 0xB0, 0x54, 0xA5, 0x55, 0x02
.byte 0x5F, 0xEE, 0xA8, 0xC5, 0x49, 0xD8, 0x54, 0xE4, 0x2C, 0xB3, 0x27, 0x61, 0xB5, 0xA1, 0x9E, 0xDA
.byte 0x5A, 0xDD, 0xA4, 0xF7, 0xE5, 0xFA, 0x41, 0x13, 0x98, 0x5B, 0xC3, 0xED, 0x00, 0x18, 0xF0, 0x60
.byte 0x07, 0x98, 0x25, 0x50, 0x71, 0x7A, 0x35, 0x9E, 0x2D, 0x5C, 0x00, 0xE3, 0xFE, 0x9E, 0xBD, 0x58
.byte 0x7C, 0x62, 0x50, 0x62, 0x5C, 0x92, 0x75, 0xF5, 0xED, 0x39, 0xE2, 0xEE, 0x51, 0xD2, 0x4E, 0x59
.byte 0x6B, 0x74, 0xAA, 0xDC, 0xEE, 0xDF, 0x7B, 0x1C, 0x3B, 0x7B, 0xFF, 0x3A, 0x1A, 0xBC, 0x93, 0x96
.byte 0x1E, 0xE3, 0xF8, 0x7B, 0x75, 0x6E, 0x71, 0x63, 0xA7, 0x53, 0x51, 0xF9, 0x26, 0x9F, 0x52, 0x92
.byte 0x13, 0xFC, 0x6F, 0x02, 0xDC, 0xEA, 0x1E, 0x17, 0x65, 0x1D, 0x52, 0x7F, 0xD9, 0xE5, 0x16, 0xF8
.byte 0xC8, 0x0F, 0x74, 0x3D, 0x7D, 0xE5, 0xA0, 0x24, 0x39, 0xF2, 0x1D, 0x5F, 0x91, 0x70, 0xF2, 0xA5
.byte 0x6C, 0x61, 0xA7, 0x48, 0x4B, 0xC5, 0x60, 0xB0, 0xE2, 0xB2, 0x30, 0xBC, 0x97, 0x46, 0xB4, 0x60
.byte 0x55, 0x29, 0x9E, 0xD3, 0x0E, 0x3F, 0xF7, 0x47, 0x31, 0x15, 0xA7, 0xC2, 0x85, 0x99, 0x67, 0xF2
.byte 0xFB, 0x0E, 0x3A, 0x46, 0xD4, 0x9B, 0xF7, 0xB6, 0x4E, 0x28, 0x73, 0xE6, 0x6E, 0x27, 0x46, 0xC4
.byte 0x51, 0xE4, 0x97, 0x5F, 0x23, 0x8F, 0xA7, 0x54, 0xA4, 0x4E, 0x17, 0x29, 0xE8, 0x7F, 0x1B, 0xE4
.byte 0x8E, 0x56, 0x2A, 0x62, 0xF2, 0x22, 0x19, 0x40, 0x4A, 0x8C, 0x26, 0xB9, 0xB4, 0x6D, 0x7D, 0x05
.byte 0x51, 0x14, 0x64, 0x75, 0xA4, 0x0C, 0xC9, 0x48, 0x5B, 0xE1, 0x72, 0x44, 0x60, 0x8D, 0x28, 0xEE
.byte 0xE4, 0x53, 0x50, 0xD6, 0x75, 0x69, 0x16, 0xC0, 0xF6, 0x3D, 0x79, 0xAA, 0xAA, 0xF6, 0xAF, 0xFC
.byte 0x0B, 0x14, 0x71, 0xAF, 0x21, 0x3B, 0xF8, 0x7C, 0x1C, 0x6A, 0xC0, 0x7C, 0xF8, 0xE8, 0x6A, 0xDC
.byte 0x3B, 0xBB, 0xB3, 0xB1, 0x25, 0xCA, 0x71, 0x1B, 0x07, 0xEB, 0xC6, 0xB2, 0xE1, 0x76, 0xAE, 0xED
.byte 0x8A, 0x1F, 0x9D, 0xAB, 0x5A, 0x95, 0x28, 0x76, 0x00, 0xE8, 0xF3, 0xF8, 0xD1, 0x5E, 0xD5, 0x0D
.byte 0x1A, 0x88, 0xBE, 0x3F, 0x52, 0x30, 0x5B, 0x5A, 0x1B, 0x22, 0x0C, 0xFD, 0x98, 0xBB, 0xEB, 0x23
.byte 0xDB, 0x88, 0xCF, 0x36, 0x1E, 0xF7, 0xAD, 0x1E, 0xE0, 0xA0, 0x17, 0xB1, 0xFE, 0xEC, 0xBE, 0x18
.byte 0x74, 0x7D, 0x58, 0xC7, 0xAD, 0xB4, 0x21, 0xC9, 0xD6, 0x2E, 0xC7, 0x6E, 0xEA, 0xB2, 0x91, 0xC5
.byte 0x3B, 0x61, 0xFB, 0x59, 0x58, 0xA8, 0x78, 0x38, 0x49, 0x8F, 0xE9, 0x48, 0x7B, 0xA8, 0x61, 0xF0
.byte 0x25, 0xBA, 0xB7, 0xD3, 0x6E, 0xD9, 0x9D, 0x45, 0x08, 0x64, 0xB4, 0xF2, 0x16, 0x46, 0xB7, 0x51
.byte 0xA7, 0xB3, 0xAB, 0xFF, 0x5C, 0x23, 0x38, 0xA6, 0xB2, 0x22, 0xEE, 0x2E, 0xCA, 0x4F, 0x1E, 0xF0
.byte 0x09, 0xD5, 0xC4, 0x78, 0xAF, 0x62, 0xBD, 0xB7, 0xC6, 0x72, 0xA9, 0xDD, 0xB8, 0x61, 0x2F, 0x5F
.byte 0x15, 0xDA, 0x5F, 0x71, 0xFE, 0x97, 0x17, 0xB1, 0xB9, 0x06, 0xDF, 0x84, 0x56, 0xFE, 0x75, 0x60
.byte 0xD3, 0x3A, 0xD8, 0x83, 0x9C, 0x96, 0x3A, 0x63, 0x08, 0xE3, 0x40, 0xC1, 0x45, 0x6F, 0x20, 0x5A
.byte 0x4A, 0x7F, 0xCC, 0x49, 0x17, 0xE4, 0xFA, 0xD1, 0xEA, 0xDA, 0x56, 0x40, 0xD8, 0xCB, 0xA0, 0xAC
.byte 0x06, 0x79, 0x2F, 0xA3, 0x10, 0x69, 0x06, 0x19, 0x4D, 0x47, 0xDA, 0x92, 0xB7, 0xFB, 0xED, 0x02
.byte 0x7B, 0xB9, 0x4B, 0x93, 0x9D, 0x45, 0x64, 0x88, 0x20, 0xBA, 0xC9, 0xF8, 0x86, 0x6A, 0xA5, 0x8D
.byte 0xE4, 0xD5, 0x30, 0xF4, 0x3E, 0x37, 0x0E, 0x8C, 0x7E, 0xE9, 0x1F, 0x35, 0xE5, 0x0C, 0x37, 0x60
.byte 0xC6, 0x82, 0xF3, 0x64, 0xC8, 0x58, 0xED, 0xE9, 0x13, 0xB6, 0xE2, 0x99, 0x21, 0x87, 0x27, 0x05
.byte 0x5C, 0x57, 0xFA, 0x9B, 0x8E, 0x09, 0x28, 0x0C, 0xF2, 0x47, 0x42, 0xD7, 0x54, 0x7A, 0x38, 0x1B
.byte 0xFD, 0x2C, 0x7F, 0xC5, 0x84, 0x6D, 0xAF, 0x98, 0x23, 0x91, 0x32, 0x45, 0x18, 0x59, 0x4A, 0x75
.byte 0xB0, 0x44, 0x11, 0x3F, 0x4D, 0x39, 0x4C, 0x40, 0x81, 0x8E, 0x18, 0xD5, 0x09, 0x51, 0xF1, 0x06
.byte 0x7D, 0x71, 0xCC, 0x02, 0xDE, 0x7B, 0x9A, 0x02, 0x0C, 0xCC, 0x47, 0x25, 0x26, 0x91, 0x9A, 0xD6
.byte 0xD6, 0xAB, 0x16, 0x24, 0xE4, 0x62, 0x65, 0x66, 0xF1, 0x7D, 0x3B, 0xFA, 0xCE, 0x2C, 0x00, 0x4C
.byte 0x9D, 0xCC, 0x4F, 0x7C, 0x48, 0xEA, 0x7E, 0x54, 0xB7, 0xC5, 0x79, 0xDD, 0x57, 0x14, 0xB4, 0x2D
.byte 0xC0, 0xCA, 0x51, 0xA4, 0x2D, 0xB6, 0x0A, 0x1E, 0x34, 0x46, 0x19, 0x03, 0x73, 0x1A, 0x4F, 0x11
.byte 0xE7, 0x9E, 0x8D, 0x2F, 0x88, 0x0B, 0x84, 0x3F, 0xD0, 0xFD, 0x1D, 0x27, 0x12, 0xD1, 0x55, 0xD2
.byte 0x9B, 0xA7, 0x77, 0xC8, 0x5E, 0x82, 0xE7, 0x92, 0xC8, 0x00, 0x95, 0x3C, 0x1A, 0xE5, 0x4D, 0x01
.byte 0x84, 0xDA, 0x31, 0x0D, 0xE6, 0xB5, 0x4D, 0xB7, 0xB2, 0x6A, 0xDE, 0xC5, 0x3B, 0x34, 0x97, 0xD6
.byte 0xDB, 0x0E, 0x9E, 0x39, 0x90, 0x85, 0xCC, 0x59, 0x86, 0x62, 0x95, 0xA0, 0x47, 0xE3, 0xA2, 0xCB
.byte 0xBD, 0xD3, 0xD9, 0xA4, 0x88, 0x26, 0x5B, 0x3B, 0x90, 0x3A, 0x00, 0xCB, 0x6E, 0x97, 0xA1, 0x4A
.byte 0xA6, 0x40, 0x84, 0x36, 0xC6, 0x50, 0x8F, 0x4D, 0xB3, 0x25, 0xED, 0xFA, 0x08, 0x90, 0xC6, 0xC6
.byte 0x64, 0x9F, 0x6A, 0xEC, 0xC5, 0xC5, 0x28, 0x55, 0x00, 0x29, 0x21, 0x6E, 0xC1, 0xC3, 0xB9, 0x67
.byte 0x04, 0x3D, 0x9D, 0xCA, 0x8E, 0x2D, 0x17, 0x41, 0x52, 0x05, 0x3C, 0x5A, 0x96, 0x02, 0x21, 0xFA
.byte 0xA2, 0x8B, 0xE6, 0x68, 0x51, 0x0F, 0xBE, 0x51, 0x38, 0xDF, 0xC0, 0xF9, 0xA2, 0x79, 0x60, 0xA6
.byte 0xB7, 0xFE, 0x71, 0x45, 0x2B, 0x89, 0x86, 0x7E, 0x8E, 0xC3, 0xD9, 0x25, 0xC5, 0xFA, 0x1F, 0x68
.byte 0x85, 0x05, 0xD0, 0xD7, 0x15, 0x8E, 0x28, 0x4D, 0x6E, 0xE9, 0x47, 0x10, 0x63, 0xA8, 0xB7, 0x1A
.byte 0xA6, 0x29, 0x60, 0xD2, 0xB2, 0xE7, 0x51, 0x41, 0xAA, 0x2A, 0x66, 0x70, 0x24, 0x85, 0xD8, 0xAA
.byte 0x8B, 0xA9, 0x81, 0xA0, 0x37, 0xAA, 0xEE, 0xA6, 0x94, 0x35, 0xB7, 0xF7, 0xDE, 0x6E, 0x12, 0x84
.byte 0x97, 0x72, 0x57, 0x4A, 0x5A, 0xA8, 0x8B, 0x04, 0xD3, 0xF1, 0x74, 0xF8, 0x77, 0x4D, 0xA3, 0x02
.byte 0xF6, 0x25, 0xA3, 0x2E, 0xCF, 0x91, 0xD4, 0x64, 0xC7, 0x8B, 0x5C, 0xA5, 0xFA, 0x6E, 0x2A, 0x91
.byte 0xE1, 0x82, 0xDB, 0x3B, 0x2B, 0x67, 0x40, 0xFE, 0x59, 0xB4, 0xF6, 0xD0, 0x01, 0x9A, 0xD3, 0xF8
.byte 0xBF, 0x76, 0x26, 0x8E, 0x08, 0xFA, 0xF3, 0xCF, 0x86, 0x4F, 0x75, 0x80, 0xBE, 0x9F, 0x11, 0x9F
.byte 0x22, 0xED, 0xDB, 0x4D, 0x55, 0x1B, 0x4B, 0xAE, 0xCF, 0x42, 0x7E, 0xD1, 0xDC, 0x51, 0xC9, 0x9B
.byte 0xC8, 0xF0, 0x2A, 0xD0, 0xEA, 0x1E, 0xA0, 0x71, 0x6D, 0x15, 0xF1, 0x2B, 0xB5, 0x03, 0xCB, 0xD7
.byte 0xF0, 0xA6, 0x24, 0x46, 0xC1, 0x70, 0xF4, 0x91, 0xB3, 0x73, 0x62, 0x90, 0xC5, 0x2C, 0x2C, 0x8D
.byte 0x1C, 0x57, 0x5E, 0x07, 0x75, 0xFE, 0x78, 0xE3, 0x14, 0x69, 0x0E, 0xC9, 0x6C, 0xD9, 0xA0, 0x5D
.byte 0x80, 0xC5, 0xA3, 0x41, 0x36, 0x98, 0xD2, 0xE9, 0x0B, 0x35, 0x79, 0xD0, 0x62, 0xA6, 0x5D, 0x7E
.byte 0xFD, 0xBC, 0x86, 0x73, 0xBA, 0xFE, 0x56, 0xCE, 0x68, 0x64, 0x98, 0xD5, 0x3E, 0x39, 0x33, 0xBF
.byte 0xFE, 0xD7, 0x00, 0x34, 0x6F, 0xD3, 0x1E, 0x7A, 0x09, 0x98, 0x4B, 0x6B, 0x3E, 0xA8, 0xEA, 0x3C
.byte 0x64, 0x70, 0xAF, 0x1F, 0x6E, 0x05, 0xEE, 0xD7, 0x6A, 0x86, 0xAC, 0xA9, 0xBF, 0xDF, 0x68, 0xBE
.byte 0xB7, 0x68, 0xF3, 0x26, 0x3C, 0x11, 0xA1, 0x45, 0xAA, 0xEC, 0xB0, 0xE9, 0x95, 0x9B, 0x25, 0xF9
.byte 0x0B, 0xD4, 0x19, 0x7A, 0xDA, 0x07, 0x51, 0x44, 0x8E, 0xFE, 0xED, 0x4E, 0xDE, 0x55, 0x0D, 0x95
.byte 0xBE, 0x00, 0xBB, 0xFB, 0x12, 0x5D, 0x40, 0xBC, 0x49, 0xF1, 0xA6, 0xDE, 0x8C, 0xCB, 0xD8, 0x98
.byte 0xA0, 0xF1, 0x12, 0x7A, 0xF9, 0x63, 0xBE, 0x88, 0x61, 0xAC, 0xD6, 0x40, 0x01, 0xE3, 0xD5, 0xC0
.byte 0xE4, 0x91, 0xBB, 0xF6, 0xEE, 0xFC, 0xB3, 0x37, 0xED, 0x59, 0x16, 0x7A, 0x25, 0xEE, 0x12, 0xC5
.byte 0xE0, 0x24, 0x3F, 0xD9, 0x88, 0xFE, 0x62, 0xEA, 0xAA, 0x38, 0x2A, 0xAC, 0x1C, 0x00, 0x6C, 0x00
.byte 0x91, 0x27, 0xF6, 0x7F, 0x24, 0xAA, 0xB7, 0x12, 0x04, 0xCD, 0x8C, 0x29, 0xBB, 0x9F, 0xEE, 0x9C
.byte 0xC4, 0x2E, 0x76, 0x4D, 0x2C, 0xD8, 0x37, 0xD6, 0x10, 0x62, 0x82, 0x2C, 0x63, 0xEF, 0x2C, 0xF4
.byte 0x17, 0x23, 0x74, 0x3B, 0xCE, 0x2C, 0x4D, 0xD2, 0xF9, 0xDA, 0xFC, 0xB5, 0x79, 0xEA, 0x51, 0x3E
.byte 0x19, 0xC7, 0x8B, 0x45, 0x9F, 0xC3, 0x1C, 0xB0, 0x26, 0x9F, 0xDD, 0x89, 0x8F, 0x0A, 0x7E, 0xA6
.byte 0x2D, 0xF2, 0xE1, 0xFC, 0x1E, 0x2F, 0xCE, 0x18, 0x09, 0xCB, 0xCD, 0x83, 0xB6, 0x1F, 0xC1, 0xCF
.byte 0xE7, 0x4D, 0x15, 0x87, 0x10, 0x31, 0x37, 0x37, 0xD1, 0x14, 0xC0, 0x60, 0x1F, 0x3E, 0x06, 0x4C
.byte 0x31, 0xE8, 0x49, 0x50, 0x17, 0x18, 0x68, 0x21, 0xE3, 0x36, 0xA5, 0x99, 0x55, 0x66, 0x68, 0x3D
.byte 0xB4, 0x7D, 0xC4, 0xC5, 0xAF, 0xFB, 0xFC, 0x80, 0x10, 0xBC, 0xE0, 0x2F, 0xFB, 0xE7, 0x7C, 0x2C
.byte 0xD0, 0xC5, 0x7D, 0xE7, 0xDD, 0xE5, 0x09, 0xC0, 0x1C, 0xAE, 0x5A, 0x72, 0x15, 0xC2, 0xAF, 0xC9
.byte 0x3F, 0x73, 0x8E, 0xEF, 0x6F, 0x8B, 0x6F, 0x80, 0x47, 0x50, 0xAF, 0x43, 0x37, 0x2C, 0x6F, 0x07
.byte 0xF2, 0xED, 0xEF, 0xD0, 0xD2, 0xF9, 0x91, 0xEF, 0xA7, 0xEB, 0x61, 0xBD, 0xAD, 0x10, 0x87, 0xED
.byte 0x84, 0x16, 0xDC, 0xF3, 0xA1, 0x4C, 0x73, 0xE8, 0x9C, 0x23, 0x2B, 0xD4, 0x4F, 0x9B, 0xDC, 0x42
.byte 0x88, 0xCB, 0x12, 0x5B, 0xC5, 0xA3, 0x4B, 0x6D, 0x8E, 0xAC, 0x2A, 0x3C, 0xBD, 0xB1, 0x29, 0x41
.byte 0xC7, 0x06, 0x34, 0x68, 0x52, 0xA8, 0x51, 0xEE, 0xCB, 0x7D, 0xC2, 0x1B, 0x19, 0x9E, 0x5D, 0xA2
.byte 0x6A, 0x70, 0xFE, 0x2F, 0x13, 0x49, 0x9C, 0xA2, 0xF5, 0xC7, 0xDF, 0xB2, 0x79, 0x08, 0xF3, 0x41
.byte 0x0E, 0x28, 0xA9, 0x61, 0xD0, 0xFB, 0x4F, 0x9B, 0x79, 0x12, 0xB7, 0x92, 0xB1, 0x15, 0x35, 0x1C
.byte 0x85, 0x33, 0x4C, 0x99, 0x7C, 0xE9, 0x3B, 0x72, 0xB1, 0x1A, 0x24, 0x2A, 0x23, 0x18, 0x6B, 0x32
.byte 0x41, 0x15, 0x93, 0x11, 0x10, 0xE3, 0xAD, 0x8A, 0xF6, 0x64, 0x1C, 0xA8, 0x7A, 0x51, 0xC4, 0xFF
.byte 0x85, 0x11, 0x98, 0x02, 0xFB, 0xD4, 0x74, 0xAC, 0xEF, 0x99, 0xD6, 0x12, 0xB2, 0x41, 0x45, 0xF3
.byte 0x56, 0xD8, 0x04, 0x67, 0xBC, 0xB2, 0xF1, 0xB3, 0x17, 0x0E, 0x5B, 0x91, 0x60, 0x20, 0x90, 0xE5
.byte 0x31, 0x29, 0xE7, 0x2C, 0xFD, 0x5C, 0xD9, 0xEC, 0xF5, 0xAF, 0xFF, 0xA7, 0xF0, 0x44, 0x9A, 0x47
.byte 0x1D, 0x9F, 0xAF, 0xD9, 0x52, 0xA0, 0x8C, 0x69, 0xAF, 0xE8, 0xFB, 0x0F, 0x08, 0x8C, 0xF5, 0x3A
.byte 0xB5, 0xDD, 0x67, 0xB3, 0x39, 0x40, 0x9F, 0x2E, 0xEF, 0x9E, 0xD6, 0xE0, 0xE3, 0x71, 0x28, 0x00
.byte 0x11, 0xD7, 0xDA, 0x63, 0x78, 0x67, 0xCD, 0x27, 0x4F, 0xC9, 0x36, 0x58, 0x55, 0x2C, 0x92, 0x0B
.byte 0x09, 0xF9, 0xBE, 0x42, 0x39, 0x5E, 0x71, 0x29, 0xFD, 0x48, 0x09, 0xE0, 0xB9, 0x31, 0xE0, 0xCA
.byte 0x09, 0xBB, 0x2E, 0x81, 0x22, 0xFC, 0xA8, 0x72, 0xC5, 0xDF, 0xCA, 0x1A, 0x0B, 0x5C, 0x25, 0x14
.byte 0x56, 0xE4, 0x57, 0x90, 0x42, 0xC9, 0xB9, 0x3F, 0x11, 0xC3, 0x1F, 0xCA, 0xF5, 0x00, 0x95, 0xFE
.byte 0xBC, 0xC4, 0x7F, 0xDF, 0xC0, 0x27, 0x51, 0x85, 0x07, 0x1B, 0xA0, 0x12, 0x78, 0xC6, 0x27, 0xCE
.byte 0xAA, 0x7E, 0x5E, 0xEC, 0x48, 0x18, 0x2C, 0x59, 0xDB, 0x4C, 0x24, 0xD0, 0x4D, 0xBA, 0xCF, 0x09
.byte 0x7E, 0x4E, 0xE8, 0x3E, 0x76, 0x3A, 0xC4, 0x7E, 0x55, 0x64, 0x90, 0xCE, 0x2A, 0xB8, 0x9C, 0xD4
.byte 0x37, 0xFB, 0xC1, 0x7F, 0x14, 0xEE, 0xD8, 0xEF, 0x3A, 0xFD, 0xC0, 0x88, 0xB7, 0x90, 0x92, 0x36
.byte 0xDE, 0x7A, 0x75, 0x55, 0xB5, 0x39, 0xD3, 0x0A, 0x9E, 0x64, 0xD9, 0xC8, 0x1C, 0x76, 0x9D, 0x53
.byte 0x71, 0x5F, 0xD2, 0x86, 0x4D, 0xAB, 0x76, 0x88, 0xA9, 0x36, 0x11, 0x61, 0xC6, 0xA3, 0x97, 0xA5
.byte 0x1E, 0x0D, 0xFB, 0xD3, 0x46, 0xCF, 0xDE, 0xE5, 0x34, 0xB7, 0xAD, 0x50, 0x2D, 0x4B, 0xA4, 0x9F
.byte 0xAA, 0x77, 0x25, 0xF8, 0x22, 0x9B, 0x80, 0xCC, 0xD2, 0x91, 0x2D, 0x99, 0x35, 0xC5, 0x3F, 0x53
.byte 0xD2, 0x3B, 0x26, 0x19, 0x0A, 0x04, 0xFE, 0x3E, 0xBB, 0xAC, 0x8F, 0xE9, 0xF7, 0x33, 0x88, 0xA1
.byte 0xAA, 0xAE, 0x9A, 0xCD, 0x49, 0x1A, 0x99, 0x1C, 0xAC, 0xC6, 0xB5, 0xE1, 0x8B, 0xF5, 0x34, 0x5E
.byte 0x30, 0x5B, 0x77, 0x3B, 0x5F, 0x76, 0x79, 0x1B, 0x22, 0x09, 0x04, 0x19, 0x3C, 0x8D, 0xBB, 0xE7
.byte 0x3B, 0x55, 0xB5, 0x85, 0x70, 0x4E, 0xA1, 0x1D, 0x15, 0x57, 0xFE, 0xA1, 0x4C, 0x33, 0xFF, 0x7C
.byte 0x8F, 0x77, 0xB7, 0xEF, 0xED, 0x31, 0x0A, 0x0F, 0x3A, 0x0F, 0x29, 0x77, 0x9D, 0xE4, 0x5F, 0xD8
.byte 0x39, 0x14, 0x5E, 0xAA, 0x62, 0xFF, 0xC7, 0x77, 0x56, 0xC5, 0x18, 0xA2, 0xF9, 0x18, 0x1F, 0x88
.byte 0x8F, 0xD6, 0x78, 0x7C, 0x07, 0x82, 0x8C, 0x42, 0x92, 0xB5, 0xBA, 0x30, 0x99, 0x19, 0x09, 0xD3
.byte 0x2D, 0x67, 0x7D, 0x90, 0x66, 0x44, 0x08, 0xBD, 0x0A, 0x21, 0x60, 0x04, 0x39, 0x7F, 0x8D, 0xC8
.byte 0x56, 0x05, 0x45, 0x5D, 0x88, 0xD1, 0xA0, 0x1B, 0x86, 0x5A, 0x4B, 0x1F, 0x74, 0x54, 0xF3, 0xA1
.byte 0xBB, 0x70, 0x31, 0x22, 0xB4, 0x3A, 0xE0, 0xBF, 0x5B, 0x40, 0xC3, 0x94, 0xC0, 0x50, 0x5D, 0x16
.byte 0x55, 0xA2, 0x74, 0xDD, 0x74, 0x15, 0xF8, 0xFA, 0x6F, 0x44, 0x1A, 0xE3, 0x98, 0x0D, 0x85, 0x54
.byte 0x7D, 0xB7, 0x77, 0x32, 0xF1, 0x58, 0xF1, 0x4C, 0x98, 0xB4, 0xE1, 0x59, 0x05, 0x3F, 0x70, 0x5A
.byte 0xE1, 0xE4, 0x38, 0x55, 0xF9, 0x31, 0x50, 0x69, 0x75, 0x6A, 0x4D, 0x0E, 0x77, 0xD2, 0x63, 0xF4
.byte 0x89, 0xDA, 0x26, 0x7B, 0x32, 0x18, 0xC8, 0xCB, 0xCC, 0xA9, 0x25, 0xD1, 0xE8, 0x95, 0x2C, 0xCA
.byte 0x79, 0x65, 0x20, 0x73, 0x96, 0x70, 0xDC, 0x0C, 0xDA, 0x2A, 0x1B, 0x51, 0xFC, 0x7E, 0x46, 0x86
.byte 0x59, 0x6D, 0x01, 0x8C, 0x85, 0xC9, 0x57, 0x52, 0x73, 0x7D, 0x24, 0x5C, 0x12, 0x51, 0x26, 0x8C
.byte 0xB6, 0x46, 0xFF, 0x4D, 0xB7, 0xDC, 0x5A, 0x91, 0x06, 0x75, 0xE3, 0x03, 0xF4, 0x2A, 0x89, 0x4D
.byte 0x97, 0x8B, 0xD9, 0x1D, 0x54, 0x31, 0x70, 0xC8, 0xAE, 0x95, 0x24, 0xC0, 0xE6, 0x4B, 0x4C, 0x9D
.byte 0x91, 0x4C, 0xEB, 0x49, 0x29, 0x45, 0xDA, 0x2F, 0xBB, 0xBE, 0x33, 0xAF, 0xE8, 0xBC, 0xFC, 0x80
.byte 0x48, 0xD6, 0x9E, 0x9D, 0x07, 0x0F, 0x65, 0xB5, 0xA4, 0x89, 0x75, 0x8B, 0xD4, 0xC2, 0x28, 0x66
.byte 0x0E, 0x13, 0xAF, 0x38, 0x59, 0x8A, 0x67, 0x14, 0x49, 0x9B, 0xC4, 0x32, 0x57, 0xC0, 0xB3, 0x9F
.byte 0x97, 0x51, 0x3C, 0x9E, 0x60, 0xA2, 0x53, 0x05, 0x2C, 0xC9, 0x90, 0x01, 0x8C, 0xB8, 0x68, 0x9B
.byte 0xCC, 0x18, 0xD3, 0x26, 0xA3, 0x3A, 0x3A, 0xEC, 0xD5, 0xFF, 0x1E, 0x2D, 0xC0, 0xD1, 0xCD, 0x57
.byte 0x23, 0x0A, 0xF5, 0x84, 0xAD, 0x49, 0x89, 0xD9, 0x12, 0x19, 0xDA, 0x9E, 0xD2, 0x42, 0x39, 0x9E
.byte 0x5B, 0x0C, 0xC4, 0xFE, 0x47, 0xFF, 0xEA, 0x1D, 0xFE, 0x09, 0x4B, 0xBE, 0xDB, 0x19, 0x15, 0xFE
.byte 0x24, 0x0A, 0x83, 0xD1, 0x54, 0x0C, 0xAA, 0x66, 0x26, 0x85, 0x05, 0xF8, 0xC8, 0x3F, 0x96, 0x23
.byte 0x4C, 0x5B, 0x21, 0x93, 0x5A, 0x0C, 0xB1, 0x58, 0x15, 0xFD, 0x17, 0xF1, 0x16, 0x2C, 0xF0, 0x3A
.byte 0x37, 0x73, 0x0C, 0x8B, 0x7F, 0xB6, 0xF2, 0xA6, 0x3C, 0xF8, 0x9E, 0x05, 0x37, 0x34, 0x29, 0x83
.byte 0x8F, 0x4A, 0x17, 0xEA, 0x57, 0xC8, 0x42, 0x6D, 0xC5, 0x5A, 0x5E, 0xDC, 0x87, 0x4E, 0x17, 0xBF
.byte 0xC1, 0x23, 0x4B, 0x41, 0xDA, 0x3D, 0xE7, 0x16, 0x35, 0x85, 0x1B, 0x6D, 0xBA, 0x45, 0xF0, 0x4A
.byte 0x8F, 0x07, 0x34, 0xE7, 0xD0, 0x77, 0x54, 0x96, 0xD1, 0xB2, 0x72, 0x58, 0x01, 0x89, 0x17, 0xC2
.byte 0xAC, 0x62, 0x04, 0x86, 0xA0, 0xEB, 0x9D, 0xD5, 0x71, 0xB9, 0x42, 0x2C, 0xFE, 0x33, 0x76, 0x8E
.byte 0x3A, 0xAA, 0x75, 0x0B, 0x21, 0xCA, 0xA1, 0xF2, 0x7C, 0x13, 0x4A, 0x7D, 0x9D, 0x62, 0x40, 0x4A
.byte 0xC4, 0x44, 0xD1, 0x64, 0x30, 0x6E, 0x3A, 0xA2, 0x28, 0x7D, 0xCE, 0x26, 0xB0, 0x44, 0xB4, 0xEB
.byte 0xEE, 0x2A, 0xF6, 0x10, 0xF4, 0x97, 0x02, 0x71, 0xAB, 0x4D, 0xEF, 0x49, 0xAF, 0x30, 0x93, 0x74
.byte 0x75, 0x65, 0xD8, 0xA5, 0xD3, 0x13, 0x48, 0xFB, 0x90, 0x16, 0x22, 0x41, 0x5A, 0xD7, 0x2C, 0x49
.byte 0x01, 0x23, 0x59, 0xF6, 0xBB, 0x5C, 0x68, 0x67, 0xA9, 0x57, 0xB0, 0x59, 0x88, 0x44, 0xCD, 0xFD
.byte 0xA9, 0xA6, 0xA2, 0x7D, 0xB9, 0xEB, 0x79, 0x49, 0x01, 0x9B, 0x8B, 0x5C, 0x72, 0xB7, 0xA6, 0x74
.byte 0xDA, 0x00, 0x6A, 0x95, 0x5C, 0xD2, 0xFC, 0x06, 0x2A, 0xAD, 0x5F, 0xB2, 0xF2, 0x2D, 0xAF, 0x9B
.byte 0xD3, 0x52, 0x19, 0x8D, 0x3E, 0x92, 0xD7, 0x3F, 0x2D, 0x62, 0x9C, 0x9F, 0x19, 0x42, 0x13, 0xF4
.byte 0x42, 0x7E, 0x8A, 0x9F, 0x51, 0x87, 0xA6, 0x7B, 0x34, 0x06, 0x2E, 0x27, 0x33, 0xDE, 0xC2, 0x07
.byte 0x31, 0xDB, 0x94, 0x6F, 0x6D, 0x6B, 0xAF, 0x9B, 0xCD, 0x4B, 0x3B, 0xE7, 0x8D, 0x4E, 0xDB, 0xD0
.byte 0xCD, 0x65, 0x70, 0x1E, 0xED, 0x16, 0x9A, 0x22, 0x1C, 0xC8, 0x49, 0x50, 0xA7, 0x0B, 0x57, 0xD8
.byte 0xE7, 0xEB, 0x48, 0x55, 0x57, 0xF7, 0xF0, 0x24, 0x42, 0x2B, 0x0B, 0xD0, 0x7A, 0xE7, 0xA0, 0x47
.byte 0x4D, 0x11, 0x66, 0x3A, 0x27, 0x00, 0x5C, 0x44, 0xC8, 0xA5, 0x94, 0x6F, 0xB1, 0xEB, 0x48, 0x99
.byte 0xD7, 0x90, 0xEE, 0x2E, 0x87, 0xDF, 0x53, 0xCA, 0x0B, 0x5F, 0x9A, 0x86, 0x46, 0x3B, 0xCD, 0x93
.byte 0x4C, 0x34, 0xCE, 0x74, 0x34, 0x2A, 0xB8, 0xFC, 0xD0, 0x4C, 0x6C, 0x81, 0x38, 0xB5, 0x1A, 0x0F
.byte 0x45, 0x09, 0x3E, 0xCD, 0xE8, 0x92, 0x97, 0xF4, 0xF1, 0x32, 0x7A, 0x38, 0x6E, 0x48, 0xCC, 0xBB
.byte 0x7C, 0x9A, 0x2F, 0xB0, 0xC4, 0xE7, 0xAD, 0x94, 0x34, 0x1A, 0x16, 0x6C, 0xCF, 0x30, 0x7C, 0x15
.byte 0x39, 0xBB, 0xE2, 0x22, 0x4D, 0x7A, 0x16, 0x3F, 0xAD, 0x90, 0x77, 0x1B, 0xD8, 0x43, 0xD6, 0x54
.byte 0xDD, 0x06, 0x05, 0xA2, 0xEE, 0xB2, 0x37, 0x22, 0xCC, 0x4D, 0x8F, 0x9C, 0x7E, 0x0C, 0xB1, 0xB8
.byte 0xC8, 0x94, 0xDA, 0x15, 0x0E, 0xF1, 0x55, 0xBC, 0x81, 0xCC, 0xD7, 0x5A, 0x10, 0xAE, 0xAF, 0xEE
.byte 0xB4, 0xB4, 0x91, 0xA3, 0x67, 0xC9, 0xC5, 0x34, 0x17, 0x55, 0xD0, 0x95, 0x62, 0x81, 0x4E, 0x2A
.byte 0x15, 0x28, 0x40, 0x24, 0x19, 0x95, 0xE0, 0x9B, 0x62, 0xB8, 0xF6, 0x73, 0x66, 0xA5, 0x61, 0x1B
.byte 0x5A, 0xF3, 0xBE, 0xC2, 0xBC, 0x84, 0xF7, 0xD3, 0xDA, 0xC7, 0x68, 0x3C, 0x49, 0xB6, 0x67, 0x5E
.byte 0xDF, 0xA7, 0x83, 0xF9, 0x3D, 0x64, 0x95, 0x9F, 0x1C, 0x8B, 0x12, 0x83, 0x31, 0x74, 0x9F, 0x8C
.byte 0x67, 0x5E, 0x4F, 0x23, 0xE3, 0x46, 0xF7, 0xBD, 0x0D, 0x5F, 0xFA, 0x57, 0x16, 0x62, 0xB6, 0xF6
.byte 0x09, 0x39, 0xF0, 0x47, 0x9D, 0x85, 0xE7, 0xBA, 0x11, 0xF9, 0x3D, 0x43, 0x6E, 0xDC, 0xCF, 0xD6
.byte 0x3A, 0x1F, 0xFA, 0x1D, 0x65, 0xF1, 0xDB, 0x73, 0x51, 0xD6, 0xCA, 0x68, 0x38, 0x80, 0x5E, 0x41
.byte 0xBA, 0x4F, 0x89, 0x57, 0xD4, 0x70, 0x11, 0xE5, 0x69, 0x4F, 0x28, 0xD8, 0x2C, 0xF8, 0xAF, 0x66
.byte 0x18, 0xA9, 0x84, 0x7D, 0x9B, 0x60, 0xF1, 0xEC, 0x36, 0xBB, 0x55, 0x6E, 0x3C, 0xB4, 0xB0, 0xF6
.byte 0x03, 0x39, 0x4E, 0xD7, 0xA9, 0x60, 0xBD, 0x13, 0xAF, 0xE6, 0xEB, 0xDB, 0xDF, 0x9B, 0x42, 0xF7
.byte 0x44, 0xC7, 0x75, 0xDF, 0x27, 0x66, 0xCC, 0x5D, 0x22, 0x22, 0xCC, 0x5E, 0xD6, 0x7C, 0x55, 0xD9
.byte 0xB5, 0xA4, 0xB1, 0x5F, 0x04, 0x6F, 0x72, 0xB4, 0x56, 0x5E, 0x90, 0x35, 0xF9, 0xD3, 0x2D, 0x3E
.byte 0x9B, 0xA3, 0x1D, 0xC2, 0x09, 0xEA, 0x20, 0x2C, 0x0C, 0xED, 0x8B, 0xE3, 0x69, 0xE0, 0xBD, 0x1F
.byte 0x85, 0x6E, 0x7E, 0x89, 0xDE, 0xF0, 0x3E, 0x34, 0x4E, 0xCF, 0x6A, 0x48, 0xA2, 0x97, 0x86, 0x3D
.byte 0x3A, 0xA4, 0x00, 0x44, 0x8F, 0x21, 0x71, 0x9B, 0x0E, 0xFC, 0x7F, 0x77, 0xDD, 0x3C, 0x97, 0x62
.byte 0xAB, 0x15, 0xEC, 0x89, 0x06, 0x2A, 0xBD, 0x55, 0xF9, 0x27, 0x9D, 0x9C, 0xBF, 0x23, 0xDA, 0xFA
.byte 0xC7, 0xDA, 0x3F, 0x56, 0xFB, 0xB0, 0xF2, 0x09, 0xAC, 0x72, 0x81, 0x89, 0xAE, 0x18, 0xEC, 0x59
.byte 0x2D, 0xD8, 0xE3, 0x33, 0x03, 0xA0, 0x89, 0xFD, 0xC8, 0x26, 0x99, 0x88, 0x4A, 0x74, 0x82, 0x12
.byte 0x4E, 0xC2, 0x68, 0x4A, 0x72, 0x5B, 0x53, 0x1E, 0xCE, 0xD4, 0xA8, 0x7C, 0xED, 0x94, 0xD6, 0x1A
.byte 0x6D, 0xB9, 0x4E, 0x71, 0x5A, 0xD7, 0x6E, 0x22, 0xFE, 0x08, 0xAB, 0x48, 0x7C, 0x2E, 0x5A, 0xCA
.byte 0xF0, 0xC3, 0x14, 0x62, 0x1F, 0x68, 0x81, 0xED, 0x3D, 0x29, 0x69, 0x2A, 0xBE, 0x40, 0x45, 0x2C
.byte 0xF9, 0x94, 0x9D, 0x53, 0x6C, 0x0B, 0x76, 0x6A, 0x13, 0x21, 0xB3, 0x90, 0x50, 0x0D, 0x5A, 0x40
.byte 0xD1, 0x6F, 0xA2, 0xF0, 0xD8, 0x23, 0xDD, 0x15, 0x4D, 0x47, 0x40, 0x0C, 0x87, 0x85, 0x38, 0x81
.byte 0x1A, 0xD5, 0xD4, 0x86, 0xE1, 0x4B, 0xF1, 0xF4, 0x6D, 0xA4, 0x85, 0xBD, 0xB2, 0xE0, 0xFD, 0x83
.byte 0x4F, 0xA0, 0x73, 0x28, 0xC3, 0x51, 0x3D, 0x11, 0x98, 0x7E, 0x1D, 0x20, 0x04, 0x55, 0xA1, 0x1E
.byte 0x2B, 0x76, 0xA5, 0x0C, 0xC1, 0x96, 0x01, 0x2E, 0x3B, 0x86, 0xEC, 0xED, 0x66, 0xE9, 0x70, 0xB6
.byte 0x8A, 0xE4, 0xDE, 0x4E, 0x35, 0x1C, 0x5F, 0xCE, 0x9A, 0x7C, 0xEE, 0x9E, 0xD2, 0x8F, 0xBC, 0xFD
.byte 0x05, 0x62, 0x09, 0xC7, 0xF8, 0x0A, 0xF6, 0x34, 0x90, 0xE2, 0x21, 0xF7, 0xCC, 0x92, 0xAD, 0x56
.byte 0x77, 0x8B, 0xA4, 0xAC, 0xA7, 0x03, 0x7A, 0x42, 0x80, 0x69, 0xE0, 0x52, 0xF8, 0x9D, 0x50, 0xFE
.byte 0xFF, 0x59, 0xC5, 0xF8, 0x64, 0xBB, 0x2C, 0xF5, 0x9E, 0x4E, 0xEC, 0x6A, 0xE0, 0x99, 0xC1, 0x57
.byte 0x25, 0x65, 0x04, 0xCD, 0x69, 0x7F, 0x0F, 0xEA, 0xE8, 0xEF, 0x3D, 0xE1, 0x8D, 0x8D, 0xE0, 0x8C
.byte 0xE6, 0xA5, 0x85, 0x4B, 0x61, 0xB1, 0x40, 0xFF, 0xFF, 0x2C, 0x6A, 0xE0, 0xC6, 0x2B, 0x38, 0xEB
.byte 0x91, 0x3C, 0xB8, 0xFA, 0xBC, 0xC7, 0xE5, 0xA4, 0xB7, 0x22, 0x86, 0x44, 0xAF, 0x66, 0xD1, 0x96
.byte 0x0C, 0x56, 0xE1, 0x6E, 0x08, 0x21, 0x6D, 0x08, 0x4E, 0xD8, 0xE8, 0x14, 0x03, 0x20, 0x00, 0x94
.byte 0x5D, 0xB8, 0x8F, 0x19, 0x80, 0x75, 0xBE, 0x38, 0x97, 0x45, 0x7D, 0x46, 0xAC, 0x4F, 0xDD, 0xB8
.byte 0xA5, 0xBE, 0x26, 0xAE, 0xE0, 0x94, 0xB6, 0x2F, 0x6C, 0x9F, 0x43, 0x70, 0xC0, 0x44, 0x05, 0x1D
.byte 0xFD, 0x95, 0x37, 0x7E, 0x0A, 0xF6, 0xB6, 0xA1, 0x3B, 0x33, 0xE8, 0xE7, 0x82, 0xC5, 0xA0, 0x28
.byte 0x83, 0xC7, 0xD7, 0x64, 0x5C, 0x8D, 0x93, 0xC9, 0x2C, 0xD7, 0x3A, 0xED, 0x1B, 0x3F, 0x0A, 0x19
.byte 0xD4, 0x42, 0x97, 0xDF, 0x38, 0x4D, 0x80, 0x74, 0x81, 0x69, 0x5C, 0x04, 0x2E, 0xFD, 0x2D, 0xB2
.byte 0xC4, 0x04, 0x16, 0x21, 0x92, 0xAA, 0xEB, 0xBF, 0x81, 0x25, 0xAC, 0x9D, 0x64, 0xB6, 0xB6, 0x39
.byte 0xF9, 0x4E, 0x19, 0x31, 0x9B, 0x99, 0xA6, 0x1D, 0x03, 0x02, 0x21, 0x31, 0x00, 0x4E, 0xE4, 0xC5
.byte 0x52, 0xFA, 0xE6, 0xE4, 0xA5, 0xD1, 0xA3, 0x26, 0xF6, 0x4F, 0xC4, 0x5B, 0x06, 0x7B, 0x95, 0x00
.byte 0xC9, 0xAE, 0x31, 0x65, 0x48, 0xD8, 0x82, 0x4B, 0xDB, 0xA3, 0x7D, 0xDB, 0xF2, 0x61, 0xA0, 0x45
.byte 0x5C, 0x86, 0x2A, 0x01, 0x58, 0xCD, 0x28, 0x4F, 0x1D, 0xEC, 0xAA, 0x24, 0x68, 0x40, 0x24, 0x31
.byte 0xEE, 0x56, 0x96, 0x36, 0x2E, 0x19, 0x82, 0x0A, 0xBD, 0xFF, 0xE5, 0xAF, 0x60, 0x85, 0xF4, 0xBC
.byte 0x0C, 0x1E, 0xBD, 0x64, 0xEC, 0xE6, 0xB4, 0x0A, 0xD2, 0x5E, 0x2F, 0x3B, 0x9E, 0x53, 0x6C, 0x8D
.byte 0xAA, 0x03, 0xC4, 0xD9, 0x1C, 0x46, 0xE3, 0xDA, 0x45, 0xC9, 0x89, 0xA6, 0x4E, 0x7E, 0x62, 0x5B
.byte 0x9D, 0x20, 0xC0, 0x8A, 0x06, 0x74, 0x94, 0xD9, 0xD3, 0xC4, 0x14, 0x72, 0x18, 0x81, 0xFF, 0xC2
.byte 0x85, 0xC3, 0x9C, 0xA2, 0x0A, 0x80, 0x7C, 0x4F, 0x49, 0x06, 0xF6, 0x98, 0x84, 0x58, 0xF3, 0x22
.byte 0x79, 0xB4, 0xAC, 0x80, 0x28, 0x41, 0x5A, 0xFC, 0x05, 0x6F, 0x6E, 0x1D, 0xF0, 0x6E, 0xE0, 0x76
.byte 0x32, 0x7C, 0x18, 0x3C, 0xFC, 0x95, 0x8C, 0x46, 0x9B, 0x82, 0xDE, 0x20, 0xDB, 0xD2, 0x42, 0x55
.byte 0x86, 0xEE, 0xD6, 0xAE, 0x2F, 0x30, 0xAB, 0x34, 0x9F, 0x19, 0x52, 0x90, 0x88, 0x32, 0x07, 0xBA
.byte 0xAF, 0x1F, 0xF7, 0xAC, 0xB5, 0x84, 0xF2, 0x50, 0x06, 0xD0, 0x70, 0xE2, 0xA2, 0xB2, 0x38, 0x28
.byte 0xA1, 0x0E, 0xD7, 0xD0, 0x3F, 0x82, 0x05, 0xDE, 0x9C, 0x58, 0x6F, 0x24, 0x8B, 0x76, 0xDE, 0x3A
.byte 0x96, 0xD5, 0xE6, 0x4B, 0x59, 0xD8, 0x9B, 0x60, 0xA8, 0x0C, 0x43, 0x4B, 0xBE, 0x7B, 0x73, 0x60
.byte 0x8A, 0x4B, 0x31, 0xC9, 0xCD, 0x36, 0xA8, 0x69, 0x8F, 0x17, 0x8D, 0x1A, 0x8E, 0x6C, 0x54, 0x24
.byte 0x42, 0x3A, 0x6F, 0x9C, 0x13, 0x0B, 0xFD, 0xBC, 0x17, 0x40, 0x07, 0xD6, 0xBC, 0x7B, 0x36, 0x46
.byte 0xC7, 0x67, 0x10, 0x94, 0x9E, 0xB8, 0xFE, 0x2D, 0xCF, 0x8C, 0x47, 0x5D, 0xF8, 0x9B, 0x81, 0x3B
.byte 0xD6, 0xF1, 0xD7, 0xEA, 0xFC, 0xD4, 0xA6, 0x14, 0x15, 0xAE, 0xEA, 0xD2, 0x2A, 0x21, 0x18, 0xF1
.byte 0x89, 0x28, 0x86, 0x27, 0xE0, 0x84, 0x55, 0xB0, 0x11, 0x9C, 0x0D, 0x0A, 0x38, 0x8F, 0x45, 0x0F
.byte 0x81, 0x1D, 0xF9, 0x7D, 0xF2, 0xA0, 0x91, 0x07, 0x4F, 0x7C, 0xD9, 0x79, 0x9E, 0xF2, 0x6A, 0x27
.byte 0x1B, 0xF0, 0x4F, 0xFB, 0x75, 0xA4, 0xAC, 0x86, 0x41, 0xB9, 0x91, 0x7A, 0x49, 0xD6, 0x89, 0xCA
.byte 0xF3, 0x83, 0x48, 0xE5, 0x24, 0xDA, 0xED, 0x73, 0x56, 0xC7, 0xEC, 0xF5, 0xB9, 0x57, 0x1C, 0xD4
.byte 0x48, 0x6B, 0xD0, 0xBE, 0x10, 0x7C, 0x45, 0x51, 0x36, 0xD6, 0xCB, 0x80, 0xAD, 0x55, 0x4A, 0xA0
.byte 0xD9, 0x93, 0x86, 0xFD, 0x6D, 0x74, 0x71, 0xC4, 0x3B, 0x5D, 0xB9, 0xF4, 0xB5, 0xD5, 0xC9, 0xFE
.byte 0x41, 0x99, 0xBC, 0x51, 0x16, 0x01, 0xA3, 0x4D, 0xD8, 0x6E, 0xCD, 0x85, 0xC3, 0x17, 0x26, 0x9D
.byte 0xAB, 0xAC, 0x9A, 0x18, 0x21, 0x0B, 0xDC, 0x5C, 0x69, 0x96, 0x51, 0x1E, 0x6C, 0x1B, 0x1C, 0xAD
.byte 0xB5, 0xD9, 0xFF, 0xCB, 0xDB, 0xA2, 0x18, 0xB3, 0x11, 0xE5, 0x38, 0xD4, 0xFD, 0x5E, 0x71, 0xA8
.byte 0x0B, 0x0C, 0xC1, 0x2C, 0x18, 0x9E, 0x89, 0x81, 0x34, 0xDA, 0xA0, 0xA0, 0xF5, 0xBD, 0x4E, 0xAB
.byte 0x96, 0x4D, 0x76, 0x71, 0xF0, 0x8F, 0x24, 0x01, 0x74, 0x5D, 0xD5, 0x72, 0xBB, 0x47, 0x1B, 0xC7
.byte 0x54, 0xDC, 0xF3, 0x6C, 0x7A, 0x7C, 0xED, 0xAE, 0x57, 0x8E, 0x4F, 0x4D, 0x4B, 0x9D, 0xF8, 0xE2
.byte 0xEA, 0x6F, 0x53, 0xDA, 0xFE, 0x78, 0xDB, 0x73, 0xD6, 0xB1, 0xE5, 0x92, 0xF9, 0x00, 0x59, 0x4E
.byte 0xDD, 0x4C, 0xBA, 0x57, 0xC9, 0xA8, 0x06, 0x20, 0x36, 0x55, 0x6E, 0x81, 0xF2, 0x67, 0x64, 0xDD
.byte 0xD6, 0xB8, 0xB8, 0xD4, 0x30, 0x94, 0x47, 0x07, 0x46, 0x2D, 0x99, 0x40, 0x2D, 0xF2, 0x8E, 0x0B
.byte 0x3E, 0x49, 0x62, 0x08, 0xF1, 0x69, 0x29, 0x27, 0xBE, 0x97, 0xA9, 0xB1, 0xFE, 0x0D, 0x8F, 0xD5
.byte 0xC5, 0x48, 0xA9, 0xF6, 0xDD, 0xF1, 0xFE, 0x24, 0x1E, 0x97, 0x64, 0x4C, 0x89, 0xF3, 0x57, 0xC8
.byte 0x3C, 0xBA, 0xD1, 0x2D, 0x23, 0xFA, 0x55, 0xE2, 0x92, 0xFF, 0x94, 0x91, 0x0D, 0x24, 0x66, 0xD3
.byte 0x6C, 0x10, 0xCA, 0x4A, 0x01, 0xC8, 0x6E, 0x1F, 0x60, 0xD2, 0x6B, 0xE9, 0xC5, 0xC2, 0xB2, 0x01
.byte 0x7C, 0x83, 0x2F, 0xA0, 0x7D, 0x85, 0x82, 0x10, 0x85, 0x16, 0xA1, 0x92, 0x3A, 0x08, 0x66, 0xA7
.byte 0x18, 0x30, 0xF1, 0x19, 0xF9, 0x5F, 0x38, 0x59, 0x32, 0xA3, 0x43, 0xF7, 0x66, 0xF5, 0xF9, 0xE2
.byte 0x78, 0x29, 0x83, 0xF6, 0xAF, 0x05, 0x06, 0x34, 0x1C, 0xA8, 0xC6, 0x57, 0xB0, 0x2D, 0xFF, 0xC8
.byte 0x5D, 0xF0, 0xE1, 0x57, 0x50, 0x19, 0xB0, 0x82, 0xBD, 0xF3, 0x7A, 0x23, 0xE9, 0x74, 0x06, 0x62
.byte 0x9D, 0x89, 0x59, 0x4D, 0x8F, 0x60, 0x81, 0xAC, 0x08, 0x48, 0x03, 0xB9, 0x75, 0x02, 0x81, 0xD2
.byte 0xF3, 0x63, 0x2A, 0x44, 0x7D, 0xDB, 0xC6, 0x3B, 0xCF, 0x41, 0x5E, 0xB8, 0xB5, 0x65, 0x1B, 0x53
.byte 0xEF, 0x74, 0xA0, 0x7F, 0xD4, 0x22, 0x2B, 0xDD, 0x6A, 0x2F, 0x96, 0xDF, 0x32, 0x18, 0xB2, 0x25
.byte 0x7B, 0xDC, 0x6A, 0xF9, 0xB7, 0x31, 0x34, 0x86, 0x72, 0x93, 0x3F, 0x28, 0xF9, 0x5A, 0x7C, 0xE8
.byte 0xCE, 0x1D, 0x67, 0xA3, 0x3F, 0x93, 0x80, 0xA9, 0xC2, 0x17, 0x88, 0xF4, 0x2F, 0x3A, 0x1A, 0xAB
.byte 0x17, 0x84, 0xA4, 0xCF, 0xB5, 0xD9, 0x56, 0x28, 0x6C, 0x95, 0x50, 0x65, 0xF0, 0xCD, 0x4E, 0xBF
.byte 0xEA, 0xB6, 0x62, 0x29, 0x49, 0xE3, 0xD3, 0x0B, 0xFA, 0x5C, 0xFF, 0x2A, 0x97, 0x1A, 0xD5, 0xAE
.byte 0x9E, 0x7A, 0x7D, 0x53, 0x54, 0xD4, 0x7B, 0xC0, 0x69, 0xCC, 0x26, 0x59, 0x99, 0x74, 0x18, 0x83
.byte 0x2A, 0x7B, 0xAD, 0x74, 0x5E, 0x81, 0x7F, 0x59, 0xDD, 0x7F, 0x83, 0x74, 0x99, 0x59, 0x23, 0x38
.byte 0xD4, 0xA1, 0x8B, 0x28, 0x75, 0x07, 0xE9, 0xDF, 0xD4, 0x10, 0x38, 0x6D, 0x84, 0x51, 0xF1, 0xAF
.byte 0xCC, 0x9E, 0x23, 0x2B, 0x20, 0xA3, 0x84, 0xFD, 0x23, 0x08, 0x72, 0xBD, 0x61, 0x95, 0xF5, 0x36
.byte 0x37, 0x81, 0x5F, 0xAC, 0x89, 0x48, 0x8B, 0x5D, 0x58, 0xC4, 0xCA, 0xDD, 0x15, 0xBB, 0x8D, 0xE2
.byte 0x5A, 0xB1, 0x0D, 0x7A, 0x54, 0x92, 0x78, 0x78, 0x9A, 0xEA, 0x35, 0xFC, 0x80, 0x2B, 0x32, 0xB7
.byte 0xAC, 0x91, 0x64, 0x35, 0xDA, 0xF0, 0x93, 0x32, 0xB4, 0x5D, 0x10, 0xCA, 0x19, 0x9D, 0xAD, 0x74
.byte 0x4E, 0xBB, 0xEE, 0xA3, 0x4D, 0x67, 0x1C, 0xE8, 0x52, 0x51, 0xE4, 0xD2, 0x7D, 0x16, 0x8A, 0x2A
.byte 0xA8, 0xEF, 0x60, 0x82, 0xDF, 0xF3, 0xB5, 0x94, 0x50, 0xC5, 0x5F, 0x6A, 0x63, 0x0C, 0xDE, 0xB1
.byte 0xC7, 0xCC, 0x55, 0x15, 0x34, 0x71, 0xFD, 0x86, 0xC3, 0xE1, 0x59, 0x40, 0xF8, 0xE4, 0x6B, 0xA1
.byte 0xD3, 0xCB, 0x24, 0xB3, 0xBE, 0xD9, 0x48, 0x0F, 0x9F, 0xA7, 0x79, 0x02, 0xB4, 0x57, 0xB4, 0x7C
.byte 0x24, 0x09, 0x91, 0x58, 0x7B, 0x8F, 0xDF, 0x3F, 0x71, 0x38, 0x80, 0x69, 0x1C, 0xEB, 0x0B, 0xF0
.byte 0xB6, 0x2F, 0xA3, 0x74, 0x09, 0xEB, 0x83, 0xA8, 0x92, 0xFD, 0xAB, 0x47, 0x54, 0x5F, 0xC3, 0x78
.byte 0x69, 0x54, 0xD0, 0xE4, 0xE4, 0xAF, 0x23, 0x55, 0xE8, 0xA3, 0xBF, 0x04, 0x8E, 0xCA, 0xF5, 0x45
.byte 0xFA, 0x98, 0xB9, 0x03, 0x84, 0x3D, 0xAB, 0x17, 0x3A, 0x56, 0x5E, 0x8F, 0xB6, 0x21, 0x07, 0x1F
.byte 0x76, 0xD8, 0x04, 0x5A, 0x88, 0x27, 0xAF, 0x70, 0xCB, 0x6F, 0x75, 0x5A, 0x39, 0x6A, 0x9F, 0x33
.byte 0x03, 0x59, 0x37, 0x87, 0x96, 0xE3, 0x9E, 0xD1, 0x3A, 0xFC, 0x60, 0xF0, 0x1E, 0x68, 0x10, 0x94
.byte 0x40, 0x14, 0xEF, 0xC9, 0x3B, 0x9F, 0x39, 0x07, 0x0E, 0xAE, 0x61, 0x48, 0x19, 0x00, 0x7C, 0x1C
.byte 0x59, 0xB3, 0xA3, 0xF0, 0x97, 0x42, 0xC2, 0xD1, 0x3E, 0x23, 0xC1, 0x5D, 0x8B, 0xD2, 0xF2, 0xCC
.byte 0xE6, 0xE1, 0x95, 0x22, 0x81, 0xCF, 0x29, 0x90, 0x7E, 0x8A, 0xD8, 0x97, 0x8A, 0x55, 0xB4, 0xE4
.byte 0x09, 0x57, 0xD4, 0xA0, 0x9A, 0x97, 0x71, 0xD8, 0xBA, 0x33, 0x36, 0x46, 0x05, 0x28, 0x12, 0xEB
.byte 0x09, 0xA8, 0x0D, 0x8B, 0x77, 0x36, 0x1B, 0xF5, 0xC1, 0xF3, 0x8C, 0x4B, 0x49, 0x41, 0x30, 0x52
.byte 0x99, 0x05, 0xF2, 0x33, 0x9C, 0x64, 0x0C, 0x56, 0x98, 0x42, 0x9C, 0x9D, 0x6A, 0xAF, 0x89, 0x74
.byte 0x57, 0x97, 0xFF, 0xCF, 0xCE, 0x1A, 0xC4, 0x8F, 0x0E, 0x51, 0xDB, 0x57, 0x92, 0x0B, 0xA9, 0x2B
.byte 0x10, 0x9C, 0x5F, 0xAD, 0x01, 0x6B, 0x03, 0x99, 0xAD, 0xA0, 0x36, 0x17, 0x50, 0xC0, 0x8C, 0xA8
.byte 0x57, 0x8B, 0x77, 0x26, 0xA5, 0x3C, 0xB5, 0xB3, 0x8D, 0x91, 0x0B, 0x20, 0x9C, 0xB5, 0x4C, 0xAD
.byte 0x51, 0xAB, 0x5B, 0x52, 0x17, 0x5E, 0xEC, 0xC4, 0xFF, 0x23, 0xDC, 0x50, 0xE3, 0x68, 0xF8, 0x3B
.byte 0xF3, 0x70, 0x61, 0x99, 0xAC, 0x16, 0x4C, 0x39, 0xA8, 0x58, 0x5A, 0x45, 0x0D, 0xA6, 0xF2, 0x5E
.byte 0x52, 0x4D, 0xB1, 0x69, 0xAC, 0x9D, 0x2E, 0xAC, 0xC0, 0x0A, 0xFC, 0xA4, 0x73, 0xF5, 0xDF, 0x67
.byte 0x65, 0x41, 0x00, 0x11, 0x58, 0x4D, 0x4B, 0x00, 0xA5, 0xA5, 0x45, 0xB2, 0x4C, 0x38, 0x11, 0x9E
.byte 0x86, 0xC3, 0x07, 0x33, 0x61, 0x35, 0xDF, 0x22, 0x40, 0xDC, 0xC6, 0xB4, 0xD2, 0xA6, 0x1B, 0x37
.byte 0xE7, 0x1C, 0x49, 0x40, 0x69, 0x94, 0x40, 0x0F, 0x39, 0x85, 0xC2, 0x85, 0xBD, 0xD4, 0x24, 0x44
.byte 0x97, 0x2B, 0x77, 0xF8, 0x61, 0x56, 0x1B, 0xA2, 0x33, 0xE2, 0x56, 0x05, 0x89, 0x71, 0x3D, 0x71
.byte 0x8D, 0x86, 0xB1, 0xF7, 0x1A, 0xF1, 0x06, 0x54, 0x77, 0xC9, 0xDA, 0x34, 0x9D, 0xFE, 0x79, 0x34
.byte 0x2A, 0xF0, 0x2D, 0x8C, 0x47, 0x49, 0x2E, 0x7A, 0x2B, 0x84, 0x80, 0xB4, 0xF5, 0xBD, 0x25, 0x83
.byte 0x43, 0xD6, 0x7A, 0x5E, 0xC8, 0x81, 0xB2, 0x3F, 0x4A, 0x8C, 0x74, 0xE8, 0x8B, 0xED, 0x1C, 0xB5
.byte 0xDD, 0x4A, 0x41, 0x24, 0x93, 0x70, 0x9F, 0xBF, 0xF4, 0x20, 0x73, 0xEA, 0xDD, 0x99, 0x6D, 0x21
.byte 0x6F, 0xE8, 0x7F, 0x37, 0x69, 0x32, 0x77, 0xB4, 0xBE, 0xEB, 0x9D, 0x4A, 0xD8, 0xB9, 0x00, 0xB6
.byte 0x04, 0x42, 0xDB, 0x98, 0xB2, 0x7B, 0x57, 0xA6, 0x9B, 0xCA, 0x90, 0x78, 0x63, 0xFE, 0x9A, 0xD3
.byte 0xE6, 0x19, 0x0B, 0x50, 0x4C, 0x83, 0x05, 0x0B, 0x6E, 0xA2, 0x55, 0x47, 0x5C, 0x55, 0xFE, 0x60
.byte 0x97, 0xD9, 0xF8, 0x4A, 0x54, 0x50, 0xF0, 0xEF, 0x1B, 0x81, 0x68, 0x7E, 0x7F, 0x02, 0x52, 0x65
.byte 0x1C, 0x5E, 0xB5, 0x68, 0xE1, 0xBA, 0x73, 0x50, 0x5C, 0xC9, 0x97, 0xB8, 0x1E, 0x96, 0x19, 0xB6
.byte 0x6F, 0x12, 0x00, 0xC4, 0x62, 0xF1, 0xB4, 0x7D, 0x72, 0x1D, 0xFC, 0xF2, 0x20, 0x4F, 0x57, 0x3C
.byte 0xAD, 0x0D, 0xA5, 0x8F, 0xC8, 0x19, 0xDF, 0x24, 0xE3, 0x77, 0xDD, 0x02, 0x0D, 0xF7, 0xB8, 0x7D
.byte 0x09, 0xB9, 0x41, 0x6C, 0xAB, 0xF6, 0xEA, 0x1D, 0x13, 0xE6, 0x10, 0x33, 0x36, 0x67, 0x70, 0xE4
.byte 0x75, 0x16, 0x73, 0x3D, 0x30, 0x53, 0x62, 0x13, 0xCA, 0x40, 0x15, 0xD8, 0x37, 0xCE, 0x55, 0x41
.byte 0x88, 0x97, 0xAD, 0x33, 0x8D, 0x98, 0x51, 0xA1, 0x7F, 0x61, 0xD5, 0xB5, 0xC9, 0x45, 0x99, 0x3E
.byte 0x5C, 0x0C, 0x7C, 0x8C, 0x60, 0xDE, 0xA0, 0x2A, 0x1E, 0xB6, 0x02, 0x55, 0x84, 0x57, 0x97, 0x0D
.byte 0xEF, 0x44, 0x40, 0x7C, 0xDD, 0x91, 0x1E, 0x5C, 0xF3, 0xF3, 0x11, 0xBC, 0x39, 0xAA, 0xFB, 0x95
.byte 0xB7, 0x77, 0x22, 0x17, 0x55, 0xC2, 0x42, 0x74, 0x79, 0x44, 0xC9, 0xFE, 0x9C, 0x61, 0x0B, 0x8B
.byte 0xA6, 0x4B, 0x08, 0x83, 0xDD, 0x27, 0xDF, 0xD1, 0x1A, 0xF0, 0x8E, 0x53, 0x9B, 0x89, 0xE9, 0x53
.byte 0x00, 0x0B, 0x6B, 0x56, 0xCE, 0xAD, 0xCA, 0x47, 0xF2, 0x94, 0x45, 0x8E, 0xF5, 0x50, 0x1A, 0x9B
.byte 0x9C, 0x23, 0x1E, 0x7A, 0x4A, 0xFE, 0x4B, 0x65, 0xEE, 0xD9, 0xB8, 0x8A, 0x63, 0xA2, 0xDD, 0x63
.byte 0xAD, 0x48, 0xBA, 0x7B, 0xF5, 0x85, 0xC3, 0xE7, 0x19, 0x08, 0x76, 0x0F, 0x59, 0x91, 0xAB, 0xF5
.byte 0xB4, 0xC9, 0x70, 0xFF, 0xC8, 0xBC, 0x64, 0xB6, 0x95, 0x1D, 0x41, 0xF9, 0xBF, 0x1E, 0x5C, 0x6D
.byte 0x67, 0x17, 0xE9, 0x5D, 0x9C, 0xAC, 0x45, 0xB6, 0xB4, 0xBB, 0xC5, 0x0E, 0x4D, 0x70, 0x04, 0x02
.byte 0x3A, 0x74, 0x01, 0x02, 0x30, 0x66, 0xB9, 0xC6, 0x83, 0xFA, 0xBF, 0x43, 0x19, 0x1C, 0xB0, 0x81
.byte 0x34, 0x9A, 0xDE, 0xD0, 0x46, 0x23, 0x86, 0xFB, 0xDF, 0x4C, 0x09, 0x2D, 0xBC, 0x0D, 0x2F, 0xF7
.byte 0x82, 0x30, 0xFA, 0xB2, 0x96, 0xB3, 0x79, 0x1A, 0xAE, 0x39, 0x5D, 0xC8, 0x55, 0x0E, 0x49, 0x89
.byte 0xA8, 0x28, 0x5A, 0xEF, 0x4C, 0xE1, 0xEA, 0x2B, 0x2D, 0xF4, 0x58, 0xEA, 0x02, 0x88, 0xE1, 0x84
.byte 0xB8, 0xDB, 0x37, 0x4F, 0x8F, 0xB0, 0x69, 0x3E, 0xE9, 0xC7, 0x07, 0x3F, 0xD5, 0x51, 0xC9, 0x7E
.byte 0x79, 0x23, 0x6D, 0xC5, 0x04, 0x58, 0xF1, 0x31, 0x4D, 0x4A, 0x1C, 0x4F, 0xD2, 0xFE, 0xD3, 0x8B
.byte 0xD9, 0x0B, 0xDA, 0x69, 0xBC, 0x43, 0xA8, 0xA5, 0x0A, 0xAF, 0xE5, 0xE0, 0x00, 0xAE, 0x5E, 0x7A
.byte 0xD2, 0xCC, 0x40, 0xD6, 0x25, 0x31, 0x08, 0x72, 0x7C, 0x25, 0xC1, 0x4E, 0x23, 0x95, 0xD9, 0xFD
.byte 0xA0, 0xB4, 0x66, 0x5C, 0xF7, 0x0F, 0x02, 0x02, 0xBF, 0xE7, 0xE3, 0xC0, 0x96, 0x41, 0x3A, 0x69
.byte 0x0E, 0x7A, 0x3F, 0x33, 0xAC, 0x48, 0xA5, 0x28, 0x6D, 0x66, 0x77, 0x91, 0xFC, 0x51, 0x8E, 0x9C
.byte 0x05, 0xF5, 0xF8, 0xFD, 0x04, 0xFB, 0x00, 0xC4, 0xE3, 0xE3, 0x84, 0x79, 0x25, 0xBF, 0xE2, 0x33
.byte 0x39, 0x22, 0x66, 0xE6, 0x6B, 0x0C, 0x0E, 0xD9, 0x73, 0x86, 0x6A, 0x6F, 0xD7, 0xF8, 0x0B, 0xDD
.byte 0xEE, 0x04, 0xDA, 0xF2, 0xFF, 0xDB, 0xB6, 0xE2, 0xBE, 0x3B, 0x5C, 0xE3, 0xFA, 0x3F, 0x17, 0x33
.byte 0x62, 0x7E, 0x1A, 0xCD, 0x8A, 0x29, 0xA7, 0xFE, 0xAF, 0x11, 0x6D, 0x87, 0x0A, 0x79, 0x64, 0xF8
.byte 0x7D, 0x3F, 0xEB, 0x7D, 0x1A, 0xA2, 0x60, 0xD9, 0xDD, 0xBC, 0xBC, 0xD7, 0xFC, 0xD4, 0x0B, 0x5E
.byte 0x52, 0x25, 0x2C, 0xDC, 0x4F, 0xD4, 0xDA, 0xFE, 0xE6, 0x48, 0x85, 0xF1, 0xC1, 0xEA, 0xEA, 0x3F
.byte 0x2A, 0xD5, 0xBC, 0x44, 0x78, 0x1C, 0x1E, 0x55, 0xD9, 0xDB, 0x2D, 0xD6, 0xAF, 0x38, 0x35, 0x01
.byte 0x5E, 0x62, 0xDE, 0xAD, 0x36, 0xB9, 0xAC, 0x1D, 0x01, 0x32, 0x0E, 0xC2, 0x1C, 0xF8, 0x01, 0x46
.byte 0xCD, 0xBE, 0x8B, 0x45, 0xDB, 0xA9, 0x9B, 0xB4, 0x84, 0xC8, 0x8B, 0x34, 0x01, 0xC0, 0x35, 0x5F
.byte 0x22, 0x13, 0x0D, 0x59, 0xCC, 0xB9, 0x76, 0xCD, 0xEC, 0x84, 0x90, 0x09, 0x7C, 0x92, 0x50, 0x4A
.byte 0x50, 0xDB, 0x90, 0x2B, 0x85, 0x2C, 0xE0, 0x0A, 0xF4, 0x6B, 0x3E, 0xF6, 0x2C, 0x74, 0x56, 0x4E
.byte 0x87, 0x63, 0xA8, 0x54, 0x1D, 0x1E, 0x21, 0x0A, 0xA2, 0xB2, 0x13, 0x1F, 0x44, 0x63, 0x6A, 0x95
.byte 0x3F, 0xFB, 0xC1, 0xC4, 0x27, 0xA1, 0xCF, 0x1C, 0x0D, 0x0E, 0x12, 0x39, 0x82, 0x68, 0x88, 0x0A
.byte 0xCC, 0x30, 0x5E, 0xEA, 0x4F, 0x80, 0xF4, 0xF2, 0x32, 0x07, 0x11, 0x77, 0x6A, 0x7C, 0x0D, 0xA9
.byte 0x77, 0xCE, 0x6E, 0x9E, 0x70, 0x3E, 0xBB, 0x7E, 0x4C, 0xCD, 0xB8, 0xCF, 0x36, 0x40, 0xD9, 0x03
.byte 0x71, 0x38, 0xED, 0xC0, 0xB8, 0xE2, 0xB2, 0xEB, 0xE9, 0xC4, 0x63, 0x54, 0x41, 0x70, 0xFE, 0xB8
.byte 0x3F, 0x6D, 0x57, 0xAF, 0xAB, 0x12, 0x2D, 0xF8, 0xE0, 0xE5, 0xC8, 0x16, 0x26, 0xA1, 0x1A, 0x98
.byte 0xDA, 0x07, 0x58, 0x92, 0xE9, 0x0B, 0x7E, 0xD3, 0xD0, 0xE1, 0x28, 0x11, 0x52, 0x26, 0xCA, 0x91
.byte 0x93, 0x21, 0x41, 0x3F, 0x34, 0x6E, 0x37, 0x14, 0x54, 0xFF, 0x2B, 0x7B, 0xA1, 0x45, 0x13, 0x7B
.byte 0x4D, 0x6C, 0x0E, 0x37, 0x77, 0x8D, 0x0A, 0x47, 0x6F, 0x32, 0x59, 0xC1, 0x59, 0x23, 0x53, 0xEC
.byte 0x44, 0x94, 0x2C, 0x79, 0x02, 0x63, 0x8E, 0x57, 0x63, 0xB9, 0xD3, 0x04, 0xFF, 0xE6, 0x80, 0x4C
.byte 0x52, 0x8F, 0x83, 0xCA, 0x1C, 0x8E, 0x12, 0x8B, 0xC1, 0x6B, 0x4D, 0x1A, 0x8E, 0xA0, 0x07, 0xD3
.byte 0x34, 0x33, 0x4D, 0x37, 0x97, 0xDB, 0x8F, 0xFA, 0x95, 0x62, 0xFF, 0x94, 0x48, 0x80, 0xE1, 0x9B
.byte 0x0F, 0x65, 0x65, 0x2C, 0xF3, 0x77, 0xB7, 0xB4, 0xE2, 0x05, 0xCF, 0x71, 0xA5, 0xD6, 0x45, 0xD9
.byte 0x0A, 0x92, 0x11, 0xA1, 0x6D, 0xA0, 0x9C, 0x02, 0x02, 0x9B, 0x97, 0x4B, 0x1C, 0x78, 0xE6, 0x2B
.byte 0xDD, 0x4B, 0x57, 0xD1, 0xC3, 0x0F, 0x86, 0xA5, 0x14, 0x55, 0x17, 0xB9, 0x2C, 0x5D, 0x93, 0x37
.byte 0xEF, 0xA4, 0xD9, 0x5D, 0x45, 0x75, 0x60, 0x47, 0x11, 0xF7, 0x93, 0x2D, 0x70, 0x79, 0x59, 0x4E
.byte 0xC5, 0xB0, 0x1F, 0x88, 0xC0, 0xA6, 0x2E, 0xD4, 0xFC, 0x45, 0x8E, 0x29, 0xA2, 0x22, 0x60, 0x92
.byte 0xC7, 0x39, 0xEF, 0x0C, 0xAE, 0x50, 0x54, 0xC0, 0x48, 0xE7, 0xED, 0xB8, 0x60, 0x46, 0x06, 0x25
.byte 0xF7, 0x26, 0xAD, 0xB7, 0xCD, 0xDC, 0x8C, 0xC9, 0x21, 0x1A, 0xF2, 0xC4, 0x3D, 0x52, 0x56, 0x04
.byte 0x8C, 0x46, 0x10, 0x3A, 0x96, 0x65, 0xFA, 0xDE, 0x4C, 0xE8, 0x97, 0xAD, 0x2E, 0x9E, 0xD3, 0x26
.byte 0xC4, 0x81, 0xDD, 0x92, 0x5D, 0x69, 0x5B, 0x7E, 0x84, 0x4D, 0x43, 0xC1, 0xA0, 0x9A, 0xC6, 0x2C
.byte 0xE0, 0xD6, 0x67, 0x77, 0x3B, 0x62, 0x55, 0x88, 0x4A, 0xEC, 0x35, 0x79, 0x8A, 0x09, 0x9F, 0x4F
.byte 0x8A, 0x7D, 0xE1, 0xE7, 0xE7, 0x3D, 0x66, 0x6C, 0x8B, 0xAA, 0x2D, 0x2B, 0x44, 0xF3, 0x57, 0x24
.byte 0xCA, 0xBF, 0x9B, 0x06, 0x21, 0xF1, 0x8F, 0x6B, 0xDE, 0xC4, 0xE5, 0x69, 0xCE, 0x85, 0xB9, 0x58
.byte 0x02, 0x9B, 0x40, 0xE9, 0xD8, 0xA7, 0x55, 0x63, 0x51, 0x83, 0x8E, 0x95, 0x77, 0xE6, 0xBA, 0x42
.byte 0xA5, 0x56, 0x49, 0xC7, 0x47, 0xD8, 0x32, 0x25, 0x9D, 0x18, 0x8E, 0x6B, 0x9D, 0x48, 0xC4, 0x9F
.byte 0xE3, 0x04, 0x89, 0xBB, 0xAB, 0xDF, 0x1F, 0xFD, 0x62, 0xAD, 0x92, 0xDA, 0x94, 0x4D, 0x1C, 0x3A
.byte 0xA3, 0x65, 0x01, 0xEA, 0x3E, 0x34, 0x10, 0xDB, 0x4C, 0x9F, 0x46, 0xE9, 0xE7, 0x0A, 0x89, 0xCA
.byte 0x0F, 0x13, 0x86, 0xBA, 0xF2, 0xA5, 0xB8, 0x55, 0x53, 0x4A, 0x2F, 0xE7, 0x98, 0x4C, 0x22, 0x3B
.byte 0xB2, 0x23, 0x26, 0xF0, 0x58, 0x36, 0xCB, 0xA4, 0xD6, 0x12, 0x8E, 0xBD, 0x1D, 0x18, 0x88, 0x2C
.byte 0x2B, 0x0E, 0xE7, 0x1D, 0xB4, 0x9F, 0x72, 0x07, 0xEA, 0xA2, 0xEF, 0x82, 0xEE, 0x11, 0xBD, 0xA1
.byte 0x35, 0xE3, 0x91, 0x8D, 0x1A, 0x5D, 0x32, 0xF0, 0x70, 0xC1, 0xAE, 0x8D, 0xD9, 0x36, 0xB9, 0x04
.byte 0x45, 0xA0, 0x22, 0xF9, 0x3F, 0x95, 0x01, 0x2A, 0x37, 0xF0, 0xAC, 0x26, 0x02, 0x69, 0xC8, 0x38
.byte 0x4D, 0x59, 0xC6, 0x67, 0xB7, 0xF9, 0x57, 0x27, 0xBA, 0x05, 0xB5, 0x93, 0x3C, 0x6E, 0x98, 0x82
.byte 0x0F, 0xBA, 0x7B, 0x4F, 0x50, 0x7D, 0x79, 0x88, 0x6E, 0x25, 0xAE, 0x70, 0x8F, 0x76, 0xA9, 0xDC
.byte 0xD0, 0x6F, 0x43, 0x88, 0x69, 0x9B, 0xB0, 0x23, 0xA1, 0x65, 0xB7, 0xDD, 0xD4, 0x4F, 0x5F, 0xE3
.byte 0x0A, 0xDB, 0x32, 0x5A, 0x58, 0xAC, 0xE2, 0xC6, 0xD2, 0x91, 0x37, 0x61, 0x08, 0xE1, 0x3D, 0xD9
.byte 0x50, 0x81, 0x61, 0xBA, 0x1C, 0x11, 0xDD, 0xBD, 0x76, 0x94, 0x9B, 0x4A, 0xE4, 0xFA, 0x2E, 0xEE
.byte 0xD6, 0x61, 0x49, 0x2E, 0x0D, 0x2C, 0xF5, 0xE0, 0xBE, 0x2C, 0x41, 0xC6, 0x0D, 0x7F, 0xA0, 0x5E
.byte 0x00, 0x01, 0x18, 0x1D, 0x13, 0xF6, 0xDB, 0x8A, 0x8A, 0x76, 0xD5, 0x6E, 0x71, 0x03, 0x5D, 0x47
.byte 0x64, 0xA7, 0x75, 0x72, 0xD4, 0x6B, 0x53, 0x92, 0x97, 0x94, 0x59, 0xA5, 0x13, 0xF9, 0x04, 0x14
.byte 0xFB, 0x1D, 0x31, 0x0E, 0x13, 0x0C, 0x98, 0x9E, 0x83, 0x6D, 0x0D, 0xF4, 0x71, 0x6B, 0x3B, 0xD6
.byte 0x12, 0xB1, 0x49, 0xE6, 0x1C, 0x9C, 0x79, 0xB4, 0x30, 0xD2, 0x5A, 0x44, 0xCC, 0x5E, 0x59, 0xC7
.byte 0x7C, 0x8A, 0xD6, 0x8F, 0x97, 0x6F, 0x2E, 0x1A, 0xDD, 0x3B, 0x0E, 0x4E, 0xA6, 0x4A, 0x25, 0xB9
.byte 0xFB, 0x6E, 0xA0, 0x18, 0x0A, 0x19, 0xCC, 0x3B, 0xEC, 0x26, 0x80, 0xB9, 0x85, 0xD9, 0x80, 0x01
.byte 0x64, 0x57, 0x91, 0xFB, 0xC6, 0xBF, 0x16, 0xA3, 0xFB, 0x25, 0xF2, 0xA1, 0x6F, 0x17, 0x5B, 0x6B
.byte 0x86, 0xFB, 0x83, 0x91, 0x15, 0x50, 0xCC, 0x01, 0x77, 0x4D, 0xBA, 0xFC, 0x27, 0x3B, 0xFE, 0x8B
.byte 0x93, 0x90, 0x87, 0x59, 0x4F, 0x9E, 0xFD, 0x4A, 0xC3, 0xEF, 0xEC, 0x33, 0x07, 0x48, 0x9E, 0x8D
.byte 0x43, 0x22, 0x1E, 0x59, 0x73, 0xEB, 0x5B, 0xEA, 0x38, 0x16, 0xE7, 0x5F, 0x51, 0xE6, 0xEB, 0xE5
.byte 0x76, 0x72, 0x3E, 0xC5, 0x10, 0x3B, 0x10, 0xD4, 0x2B, 0xFC, 0x07, 0x32, 0x44, 0xA6, 0xC0, 0x88
.byte 0xC9, 0xDE, 0xE1, 0x3C, 0xCA, 0x3C, 0x27, 0x03, 0x53, 0x0E, 0x62, 0xA4, 0xF4, 0x4E, 0x89, 0x6A
.byte 0xC1, 0xC8, 0x30, 0xD1, 0x04, 0x40, 0xA6, 0x30, 0x3D, 0xAD, 0x62, 0x82, 0x54, 0x23, 0x0B, 0x1E
.byte 0x01, 0xED, 0x5A, 0xCB, 0x29, 0x81, 0xCE, 0x7C, 0x90, 0x31, 0x21, 0x85, 0x80, 0xAB, 0xF0, 0x41
.byte 0x74, 0x20, 0x12, 0x78, 0x61, 0xB9, 0xA8, 0x9F, 0x66, 0x0B, 0x21, 0xBB, 0x2E, 0x2C, 0xD9, 0x30
.byte 0x19, 0x34, 0xFC, 0x43, 0xB6, 0xCB, 0xC0, 0x46, 0xFD, 0xE2, 0xCC, 0x7D, 0x8E, 0xBC, 0xBE, 0x02
.byte 0xDD, 0xD1, 0x7B, 0x3E, 0x8A, 0x24, 0xDD, 0xF1, 0x30, 0xFF, 0xAD, 0x5F, 0x2C, 0x86, 0x90, 0x46
.byte 0xBB, 0x8D, 0x8A, 0x71, 0x58, 0x4A, 0xB8, 0x56, 0x2D, 0x84, 0xD3, 0xBC, 0x40, 0x92, 0xBF, 0x1D
.byte 0x64, 0x3A, 0x5C, 0xEF, 0x5F, 0x3A, 0xE0, 0x90, 0x39, 0x8E, 0xF0, 0x65, 0x14, 0x80, 0xAC, 0xCF
.byte 0x0D, 0x36, 0x40, 0x66, 0x81, 0xF9, 0xBC, 0xAE, 0x7D, 0x90, 0x6B, 0xBE, 0x23, 0x2A, 0xDC, 0x88
.byte 0x65, 0x38, 0x77, 0xC5, 0x72, 0x58, 0x55, 0xAC, 0xE6, 0x45, 0x11, 0xFB, 0xC6, 0xBE, 0xCA, 0xD3
.byte 0xF4, 0x0B, 0x3A, 0x75, 0x04, 0xF7, 0x24, 0x82, 0x87, 0x8F, 0x40, 0xAB, 0xB9, 0x1D, 0x33, 0x1F
.byte 0x55, 0xAB, 0xE4, 0xC8, 0x03, 0x39, 0x74, 0xEA, 0x7F, 0x86, 0xE5, 0x45, 0x44, 0xAF, 0x19, 0x38
.byte 0xBB, 0x53, 0xAE, 0xC0, 0x4A, 0xD2, 0x43, 0xD2, 0x62, 0x84, 0x7E, 0x1C, 0xA1, 0xB2, 0x3B, 0xF6
.byte 0x5D, 0x1F, 0xBE, 0x60, 0x59, 0x33, 0x4A, 0xD9, 0xB9, 0x30, 0x1E, 0xFE, 0xE0, 0x38, 0x37, 0x9B
.byte 0x8C, 0xE5, 0x5C, 0xD6, 0xB7, 0x9F, 0xA9, 0x1A, 0x23, 0x28, 0x36, 0xC4, 0xDA, 0x71, 0xBB, 0x37
.byte 0x91, 0x7A, 0x98, 0xEB, 0xAD, 0xE2, 0xC4, 0x67, 0x13, 0xE3, 0x66, 0xF3, 0x1B, 0x9D, 0x8E, 0xA7
.byte 0x82, 0xEB, 0x7E, 0x3A, 0x8B, 0x28, 0x54, 0xAF, 0x50, 0x8B, 0x73, 0x2A, 0xFC, 0x2F, 0x61, 0x8E
.byte 0xA9, 0xF9, 0x79, 0x57, 0xDC, 0x3D, 0xBF, 0xEF, 0x20, 0x25, 0xE2, 0x3C, 0xC3, 0x71, 0xE3, 0x45
.byte 0x5D, 0x62, 0x80, 0xE8, 0x8A, 0xD4, 0x97, 0xDB, 0x5F, 0x0B, 0x05, 0x5C, 0x3B, 0x67, 0xEA, 0xE4
.byte 0x61, 0x64, 0x3C, 0x3D, 0xA1, 0xFC, 0x2D, 0xC2, 0x22, 0x10, 0xFF, 0xE5, 0x82, 0xE2, 0x2A, 0xDF
.byte 0x45, 0xAA, 0xC7, 0xD0, 0x7F, 0x5F, 0xAB, 0xDF, 0x6B, 0xB0, 0x3C, 0xA6, 0x17, 0x27, 0x8B, 0x78
.byte 0x8B, 0xC7, 0xB6, 0x2D, 0xC4, 0xE4, 0xEF, 0xE6, 0xF4, 0xEF, 0xCB, 0x77, 0xD1, 0xF6, 0x56, 0x17
.byte 0xA1, 0x1E, 0xE7, 0x21, 0x7D, 0x92, 0x01, 0xE9, 0x43, 0x3D, 0x8F, 0x5B, 0x64, 0x1A, 0xD4, 0xF0
.byte 0xE2, 0x8A, 0x1D, 0xA6, 0x6E, 0x0D, 0x8C, 0x63, 0xFC, 0x58, 0xDA, 0xCE, 0x4F, 0x31, 0xE5, 0xF0
.byte 0x4F, 0xCD, 0x12, 0xCD, 0x5F, 0x13, 0xB6, 0xA3, 0x50, 0x45, 0xFE, 0xB5, 0x60, 0xD2, 0xA5, 0x42
.byte 0x5C, 0xC3, 0xE8, 0xCB, 0xD0, 0x75, 0x2F, 0xCC, 0xCE, 0x0A, 0x9A, 0x1D, 0x3B, 0x80, 0x0E, 0x8B
.byte 0x4D, 0x21, 0x58, 0xAD, 0x34, 0x0F, 0x50, 0x85, 0x55, 0x4E, 0x3B, 0xB5, 0x20, 0xE1, 0xF8, 0x7D
.byte 0xA4, 0xE1, 0x49, 0x74, 0x57, 0x79, 0x41, 0x25, 0x83, 0xDB, 0x43, 0xBF, 0x5C, 0x52, 0x4A, 0xA9
.byte 0x73, 0xA3, 0x57, 0xA8, 0xB2, 0xA7, 0x2E, 0x08, 0xF6, 0x69, 0xBE, 0x17, 0x4A, 0xB6, 0x95, 0xEE
.byte 0x98, 0xDE, 0x63, 0xEF, 0x57, 0xA4, 0x15, 0xDB, 0x80, 0x59, 0x9A, 0xDC, 0xAC, 0xE5, 0x86, 0x20
.byte 0x88, 0xDD, 0xC8, 0x3B, 0x85, 0xF7, 0x43, 0x7C, 0x60, 0x02, 0x93, 0xAB, 0xB9, 0x28, 0x9A, 0x51
.byte 0x07, 0xFD, 0x40, 0x5F, 0xA2, 0x56, 0x3A, 0x22, 0xAF, 0xD5, 0xFE, 0x5B, 0xBA, 0x85, 0x7B, 0x43
.byte 0x63, 0x44, 0x7E, 0xE8, 0x3B, 0xC2, 0x65, 0x9C, 0xC5, 0xF8, 0x48, 0x7E, 0x21, 0xE2, 0xCF, 0x28
.byte 0xE0, 0x10, 0x87, 0x82, 0x67, 0xC2, 0xA4, 0x16, 0x98, 0xA3, 0x72, 0x53, 0x29, 0xEE, 0x96, 0x8C
.byte 0x32, 0x15, 0x75, 0x6E, 0xD7, 0xDA, 0x0B, 0x9C, 0xD3, 0x53, 0x1B, 0xF4, 0x35, 0xEB, 0x1C, 0x15
.byte 0xFC, 0xA4, 0x98, 0x63, 0x67, 0x3D, 0x7A, 0xFF, 0xE0, 0xEC, 0x52, 0x0A, 0xDA, 0xE9, 0x96, 0x0D
.byte 0xFE, 0x0B, 0x7C, 0xD5, 0xE6, 0x87, 0x72, 0xB9, 0xDA, 0x8E, 0xAD, 0x0F, 0x79, 0xCA, 0x25, 0x75
.byte 0x6E, 0xBE, 0xD8, 0xD5, 0xFB, 0x52, 0xD5, 0xDC, 0x3E, 0x27, 0xE6, 0x19, 0x10, 0x7D, 0x27, 0x0E
.byte 0x88, 0xA3, 0xE4, 0x6E, 0x2A, 0x57, 0x28, 0x05, 0xE5, 0xD5, 0x15, 0x5E, 0x9F, 0x3A, 0xD4, 0x0D
.byte 0xF9, 0xAC, 0xE3, 0xF4, 0xFE, 0xB8, 0xD1, 0x3D, 0xE0, 0xB8, 0x57, 0xF1, 0x35, 0x7F, 0x00, 0xBD
.byte 0x22, 0xE5, 0x2C, 0x4D, 0x3C, 0x54, 0x52, 0x22, 0x2A, 0x68, 0x81, 0xC9, 0xA3, 0x55, 0xD7, 0x9C
.byte 0x02, 0xBA, 0x91, 0x00, 0x73, 0x62, 0x3E, 0x54, 0x1A, 0x96, 0x45, 0x4F, 0x15, 0x45, 0x0D, 0x38
.byte 0x2B, 0x3A, 0x85, 0x68, 0x8F, 0xD8, 0x8A, 0xB9, 0x40, 0x0C, 0x83, 0xE3, 0x61, 0x5B, 0x80, 0x63
.byte 0x15, 0x11, 0x64, 0x89, 0x73, 0xA3, 0xDD, 0x8E, 0x3A, 0x23, 0xDE, 0x4F, 0x69, 0xEC, 0x87, 0x94
.byte 0x27, 0x0D, 0xFC, 0xB7, 0xE6, 0x87, 0x71, 0x27, 0x93, 0xF4, 0x0B, 0xF5, 0x4F, 0x8C, 0x59, 0x65
.byte 0x9D, 0xBE, 0xEF, 0x11, 0x62, 0xCD, 0xA0, 0x9C, 0xF0, 0x7E, 0xEC, 0x59, 0x6B, 0x74, 0xEE, 0x92
.byte 0x81, 0xEB, 0x49, 0x68, 0x72, 0xBA, 0x90, 0x06, 0xAF, 0x9C, 0xFC, 0xFE, 0x28, 0x56, 0x64, 0xC5
.byte 0x14, 0x53, 0xD7, 0x76, 0x20, 0x77, 0x13, 0x11, 0xF5, 0xFF, 0x6B, 0x61, 0x73, 0x59, 0xF3, 0xF5
.byte 0x45, 0x3D, 0x5E, 0xB7, 0xF7, 0xEE, 0xBE, 0xA6, 0x8B, 0xBB, 0xA5, 0xB3, 0x11, 0x09, 0x79, 0x25
.byte 0x5D, 0x50, 0x9C, 0x7D, 0xC7, 0xAF, 0x8F, 0xBD, 0xAE, 0xFA, 0x1E, 0x22, 0x53, 0x12, 0x17, 0x98
.byte 0x4F, 0x75, 0x50, 0x46, 0x63, 0x0F, 0xED, 0xEE, 0xCA, 0x92, 0xA2, 0xDC, 0x9C, 0x1B, 0x01, 0xF9
.byte 0x6B, 0x9E, 0x77, 0x33, 0x4E, 0x06, 0xF1, 0xFC, 0x00, 0x0F, 0x1F, 0x54, 0x21, 0x36, 0xED, 0x70
.byte 0xAB, 0x3D, 0xB7, 0x0F, 0x4D, 0xA4, 0xFE, 0x18, 0x37, 0xA0, 0xF4, 0xD3, 0xBC, 0xF5, 0xCD, 0x28
.byte 0x94, 0x44, 0x5C, 0xE2, 0x4B, 0x4D, 0xDF, 0x4C, 0x5C, 0xFE, 0xA0, 0x7E, 0x34, 0x8D, 0xEE, 0xE0
.byte 0xCB, 0xA6, 0xF0, 0x18, 0x4A, 0xEE, 0x30, 0x81, 0x8F, 0x25, 0x55, 0x4C, 0x1B, 0x22, 0x74, 0xAF
.byte 0x67, 0xD0, 0x91, 0xB2, 0x1D, 0x71, 0xFE, 0x7A, 0x70, 0x9F, 0xF8, 0xA4, 0x2C, 0xE7, 0x85, 0xF8
.byte 0x8E, 0x75, 0x11, 0xD8, 0x64, 0x42, 0x5A, 0xF3, 0x67, 0xB0, 0x3F, 0x82, 0xD3, 0xB4, 0x31, 0x3A
.byte 0x85, 0xC3, 0xED, 0xA3, 0x35, 0xEC, 0x1D, 0xA5, 0x8B, 0x16, 0x4A, 0xB8, 0xFE, 0xCF, 0xB0, 0x8C
.byte 0x45, 0xC2, 0x65, 0xA9, 0x04, 0xC0, 0x9D, 0x6B, 0x71, 0xDD, 0xED, 0x44, 0x91, 0x1F, 0x7E, 0x16
.byte 0xE3, 0x6B, 0xB9, 0x18, 0x57, 0xD7, 0xBD, 0xE3, 0xEE, 0x07, 0x9B, 0xEC, 0xD7, 0x4C, 0x79, 0x1C
.byte 0x0F, 0xDF, 0xC5, 0x13, 0xA0, 0x63, 0x7F, 0x11, 0x40, 0x6D, 0x55, 0xD1, 0x8C, 0xD4, 0xE8, 0x6F
.byte 0x3F, 0xA2, 0x87, 0x97, 0x79, 0x44, 0x7B, 0x68, 0x4C, 0x17, 0x54, 0x23, 0x64, 0xCE, 0x3F, 0x73
.byte 0xAE, 0x05, 0x86, 0x4E, 0x68, 0x06, 0x60, 0xA8, 0x73, 0xB6, 0x7A, 0xFF, 0x8A, 0x62, 0x6F, 0xCA
.byte 0x04, 0xF6, 0x62, 0x7E, 0x3B, 0xDD, 0xE6, 0x87, 0xF4, 0x3B, 0xAB, 0x58, 0x0A, 0xEA, 0xCC, 0xB8
.byte 0xEF, 0x53, 0x07, 0x58, 0x59, 0x68, 0x00, 0xCC, 0x1E, 0x7A, 0xCC, 0xA8, 0xDD, 0x3B, 0x72, 0xE2
.byte 0x31, 0xD4, 0x60, 0x6D, 0xB2, 0x47, 0xF5, 0xA6, 0x83, 0xA0, 0xFF, 0x8D, 0x8B, 0xCC, 0x46, 0x7A
.byte 0x1F, 0x4E, 0xD3, 0x78, 0xB6, 0xD3, 0x45, 0xD5, 0x4E, 0x11, 0x7D, 0x2C, 0x4C, 0xF0, 0x0E, 0x7E
.byte 0xC4, 0x6F, 0xEC, 0x77, 0xB6, 0xE1, 0x1D, 0x39, 0x82, 0x1D, 0xC7, 0x0D, 0xE9, 0x0D, 0x88, 0x09
.byte 0x5C, 0x5B, 0x81, 0x12, 0x2F, 0xC7, 0xE7, 0x7D, 0xD8, 0x65, 0xA9, 0x25, 0x55, 0xB8, 0xA3, 0x1A
.byte 0x27, 0x90, 0x91, 0xDD, 0x71, 0xAF, 0x17, 0xF3, 0xCD, 0xDE, 0x00, 0xB6, 0xEC, 0x88, 0xBF, 0x48
.byte 0xE4, 0x41, 0x5B, 0x13, 0x09, 0x43, 0x90, 0xE1, 0xA8, 0x3A, 0x07, 0xFE, 0xF3, 0xAB, 0x18, 0x1A
.byte 0x3B, 0xAA, 0xF8, 0xAC, 0x59, 0x0F, 0xA0, 0x26, 0xEE, 0xA1, 0xDD, 0xDB, 0x2A, 0x9D, 0x23, 0x0E
.byte 0xDF, 0x7E, 0x21, 0xE8, 0xC2, 0xB2, 0xCA, 0x6A, 0xED, 0xD1, 0x68, 0xE0, 0x7C, 0x81, 0xFA, 0xB7
.byte 0x2B, 0xF3, 0x64, 0x85, 0x02, 0x04, 0xAB, 0xF1, 0xA6, 0x89, 0xCC, 0xD1, 0x26, 0xF0, 0xDF, 0x05
.byte 0x6F, 0x01, 0xEE, 0x31, 0xB4, 0xB8, 0x9B, 0xA1, 0x89, 0x04, 0x82, 0x05, 0x85, 0x7C, 0xBC, 0xB1
.byte 0x6F, 0x20, 0x36, 0x72, 0x25, 0xE1, 0x64, 0xCB, 0x6B, 0x30, 0x9C, 0x91, 0x20, 0x7C, 0x97, 0x90
.byte 0x7D, 0x85, 0xC1, 0x32, 0x3D, 0x5D, 0xD3, 0xC6, 0x61, 0x55, 0xCC, 0xE7, 0xD2, 0x88, 0x98, 0x42
.byte 0xA8, 0xCE, 0xB5, 0xCE, 0xB0, 0x19, 0x9A, 0x1B, 0x49, 0x37, 0xAD, 0x6A, 0xB3, 0x45, 0xFA, 0x31
.byte 0xCA, 0xBC, 0x63, 0x08, 0x19, 0x37, 0xCF, 0x7B, 0x8D, 0x9B, 0x62, 0x5F, 0x23, 0xFB, 0xA1, 0xCC
.byte 0xCA, 0x57, 0x9A, 0x7A, 0x70, 0x35, 0x96, 0xBA, 0x6C, 0x44, 0x24, 0x20, 0x89, 0x1F, 0x52, 0x53
.byte 0xDC, 0xB6, 0x5C, 0xF5, 0xEE, 0x2B, 0x71, 0x7B, 0xC6, 0xD3, 0xDA, 0xEA, 0xCF, 0x7C, 0xB6, 0x99
.byte 0xD3, 0x51, 0x14, 0x44, 0x86, 0xAA, 0xFE, 0xF3, 0xEF, 0x23, 0x14, 0x78, 0x43, 0x66, 0xCC, 0x1F
.byte 0x1D, 0x28, 0x15, 0x0B, 0x54, 0x86, 0x86, 0x1A, 0x5A, 0x61, 0x04, 0x29, 0xDE, 0xBB, 0xC3, 0xB2
.byte 0x0D, 0xD7, 0xF6, 0x94, 0x82, 0xF4, 0x87, 0x71, 0x17, 0x9C, 0xE9, 0x5A, 0x03, 0xB6, 0x7A, 0x20
.byte 0xDE, 0x8F, 0x2C, 0x33, 0x16, 0xB3, 0x4D, 0x70, 0x15, 0x52, 0x9A, 0xF3, 0x0E, 0x5D, 0xA6, 0x1B
.byte 0x35, 0x9C, 0xAF, 0xB7, 0x90, 0x37, 0x29, 0xA8, 0xD3, 0x12, 0x03, 0xD7, 0xC9, 0x7D, 0xF7, 0xA8
.byte 0x0D, 0x24, 0xDB, 0x23, 0xD7, 0x28, 0x94, 0xED, 0x7B, 0x2F, 0xE0, 0x89, 0x8D, 0x86, 0xA5, 0xC2
.byte 0x23, 0x54, 0x79, 0xB4, 0x8C, 0xA2, 0x5C, 0x60, 0xB5, 0x60, 0x37, 0x7F, 0xDE, 0x2F, 0x27, 0xEB
.byte 0x53, 0x02, 0x0F, 0x2B, 0x2B, 0xA4, 0x18, 0xA6, 0xD3, 0xF9, 0x30, 0x60, 0x7F, 0xD5, 0x22, 0xA3
.byte 0x2A, 0x9C, 0x57, 0xB7, 0x3F, 0xB4, 0x17, 0xF5, 0x14, 0x4E, 0x74, 0xF2, 0x7E, 0x9B, 0xDE, 0xD1
.byte 0x9E, 0xED, 0xFD, 0xC9, 0x91, 0x15, 0x70, 0x65, 0x0E, 0xA1, 0xC5, 0x8E, 0x77, 0xE8, 0x31, 0xA2
.byte 0x84, 0x89, 0x59, 0xC4, 0x3D, 0x71, 0xB9, 0x51, 0xC0, 0x2D, 0x44, 0x3E, 0xC9, 0x22, 0x10, 0x67
.byte 0x10, 0x0D, 0x31, 0xA2, 0x22, 0xA2, 0x07, 0x31, 0x43, 0xCC, 0xC0, 0xBB, 0xB5, 0xF2, 0x5D, 0x39
.byte 0x7B, 0xB6, 0xFD, 0xB8, 0x27, 0xB7, 0x0A, 0xE7, 0xE5, 0x4E, 0x26, 0xAE, 0x70, 0x36, 0x16, 0x81
.byte 0x43, 0x48, 0x23, 0x66, 0xEA, 0x2B, 0x98, 0x2E, 0xF8, 0x58, 0xE9, 0xAD, 0x4A, 0x46, 0xE6, 0xC6
.byte 0xFD, 0xE4, 0x7E, 0x25, 0x9B, 0x88, 0x0C, 0x80, 0xD6, 0x33, 0x2F, 0x47, 0x69, 0x45, 0xC9, 0xAC
.byte 0x8E, 0xEC, 0x13, 0x78, 0x17, 0xAB, 0xA6, 0x0F, 0x04, 0x8F, 0xBD, 0x4F, 0xD6, 0xA3, 0x15, 0xD3
.byte 0x88, 0x93, 0xF8, 0x24, 0x1C, 0x05, 0xA5, 0xF3, 0x38, 0xD4, 0x3B, 0xA1, 0x1A, 0x04, 0x4E, 0xA8
.byte 0xF0, 0x61, 0x21, 0x08, 0x0D, 0xC7, 0x18, 0x11, 0x57, 0xD5, 0x60, 0x2D, 0x79, 0x75, 0x01, 0x02
.byte 0x09, 0xF9, 0x26, 0x26, 0xFF, 0xCB, 0x19, 0x37, 0xA0, 0x54, 0xD8, 0xBA, 0x58, 0x27, 0x63, 0x49
.byte 0x89, 0x84, 0x52, 0x96, 0x4C, 0x6B, 0xA8, 0xA3, 0x40, 0x08, 0xD1, 0xBA, 0x7E, 0xD2, 0xBC, 0x88
.byte 0xCB, 0xE2, 0xAE, 0xCA, 0xAE, 0xC7, 0x02, 0x4E, 0x1C, 0xDB, 0x09, 0x74, 0x02, 0x6C, 0xBE, 0x8B
.byte 0xF1, 0x10, 0x22, 0x3D, 0x7B, 0xCA, 0xE1, 0xBC, 0xD3, 0xB2, 0x76, 0x52, 0x84, 0x33, 0xDA, 0x50
.byte 0x16, 0x89, 0x1B, 0xC4, 0x51, 0x1D, 0x13, 0x6D, 0xF8, 0x1C, 0xE2, 0xFB, 0x89, 0xA0, 0x87, 0x7B
.byte 0xB1, 0xA9, 0xB8, 0x2D, 0x74, 0x99, 0xE9, 0x47, 0x4C, 0x60, 0x99, 0xD0, 0x93, 0x74, 0x21, 0xA9
.byte 0xFD, 0x3C, 0x6E, 0x4E, 0x59, 0x81, 0xBC, 0x52, 0x9E, 0x9E, 0x4E, 0x27, 0x3F, 0xD5, 0xA2, 0xF1
.byte 0x7F, 0x5B, 0x1E, 0xF3, 0xF5, 0x08, 0x3B, 0x41, 0x68, 0xD4, 0x12, 0xFC, 0x49, 0x33, 0xA6, 0x46
.byte 0x70, 0x15, 0x95, 0xCA, 0x96, 0x51, 0x1C, 0x34, 0xF0, 0x6B, 0x5C, 0x30, 0x40, 0xFF, 0x21, 0xBF
.byte 0x5B, 0x40, 0xB2, 0x50, 0x48, 0xEE, 0x92, 0xB0, 0xC3, 0xA5, 0xAD, 0x0C, 0xD9, 0x54, 0x53, 0x49
.byte 0x69, 0xE8, 0x13, 0xFF, 0x3A, 0x30, 0x34, 0x2B, 0x9B, 0x91, 0x5B, 0xDC, 0x91, 0x7D, 0x9B, 0xEC
.byte 0xBD, 0x4E, 0x3C, 0x05, 0x3C, 0xCF, 0xB6, 0xFF, 0x74, 0x64, 0x0C, 0x4E, 0xB8, 0x5F, 0x97, 0x21
.byte 0x48, 0xAB, 0x21, 0x83, 0xDC, 0x56, 0xAE, 0x77, 0xE8, 0x0A, 0x53, 0x79, 0x88, 0xEF, 0x65, 0x46
.byte 0x3E, 0xA2, 0x4B, 0x7A, 0x72, 0x02, 0x7A, 0xE7, 0x66, 0x86, 0x35, 0x1F, 0xE6, 0xCC, 0x40, 0x2E
.byte 0x78, 0x62, 0xB2, 0x54, 0xB9, 0x61, 0xCC, 0xA1, 0x6B, 0x1F, 0x1A, 0xF4, 0x0F, 0x80, 0x3A, 0x4D
.byte 0x22, 0x86, 0xC8, 0x94, 0x88, 0x42, 0x7B, 0xEF, 0xC9, 0xB0, 0x0E, 0xAF, 0x7D, 0x4F, 0xDE, 0xF6
.byte 0xB2, 0x90, 0x4A, 0x6B, 0xF1, 0x16, 0x0C, 0x5D, 0x36, 0x27, 0x51, 0x45, 0xA7, 0x8C, 0x92, 0xCA
.byte 0x12, 0x5A, 0x5E, 0x9B, 0x9D, 0xDA, 0x8A, 0x67, 0x8B, 0x99, 0x16, 0x09, 0xE8, 0xF5, 0xFF, 0x9A
.byte 0x85, 0x49, 0x06, 0x77, 0x60, 0x13, 0xD4, 0x96, 0x3B, 0x26, 0xDB, 0xE2, 0xB2, 0x6E, 0xAD, 0xC5
.byte 0xC9, 0x0B, 0x60, 0x67, 0xE6, 0xEB, 0xCE, 0x71, 0x84, 0xE5, 0x7B, 0x6D, 0xDA, 0x7A, 0x08, 0x60
.byte 0xC4, 0x0E, 0xD7, 0x24, 0x22, 0xAB, 0xBA, 0x5D, 0xD2, 0x96, 0x3F, 0x85, 0x05, 0xEC, 0x4A, 0xCF
.byte 0xF8, 0xAB, 0x36, 0xDF, 0x96, 0x04, 0x51, 0x1B, 0xE9, 0xCC, 0x88, 0xC3, 0x46, 0x90, 0x23, 0x0A
.byte 0x9F, 0xFB, 0x2E, 0xC1, 0xA7, 0xE9, 0x1E, 0x79, 0x80, 0x5E, 0xFF, 0x85, 0x4B, 0x4A, 0x54, 0x44
.byte 0xF5, 0x8B, 0x23, 0x8C, 0x8F, 0x74, 0xA8, 0x79, 0x41, 0x30, 0x3D, 0x87, 0xC1, 0x61, 0x92, 0x61
.byte 0x5C, 0xC1, 0x22, 0x03, 0xAB, 0x41, 0x7D, 0x2B, 0xA0, 0x7C, 0xB1, 0xEB, 0xC6, 0x06, 0x2F, 0xBC
.byte 0x91, 0x53, 0x49, 0x21, 0xC8, 0xF1, 0x9A, 0x09, 0x22, 0xD7, 0x91, 0xE4, 0x38, 0x24, 0x45, 0x94
.byte 0xE5, 0x68, 0x98, 0x90, 0xAA, 0x15, 0xBB, 0x4A, 0x92, 0x6D, 0x35, 0x59, 0x73, 0x65, 0x16, 0x05
.byte 0xB9, 0x5F, 0x26, 0x81, 0x51, 0xC0, 0x8B, 0x73, 0x97, 0x1D, 0x57, 0xD0, 0x41, 0x9D, 0x64, 0x26
.byte 0x05, 0xFD, 0xB7, 0xB0, 0x12, 0x73, 0xFA, 0xA5, 0xE0, 0x2F, 0xFE, 0x54, 0x95, 0x14, 0x59, 0x4E
.byte 0x74, 0x7F, 0xD0, 0xC5, 0x40, 0x5C, 0x38, 0xD8, 0x79, 0x90, 0xA8, 0xBB, 0x2E, 0x0D, 0xE2, 0x34
.byte 0x0A, 0x99, 0xE4, 0x1D, 0x0C, 0xDE, 0xC2, 0xED, 0x0E, 0xC1, 0x41, 0xA3, 0xD6, 0x9A, 0xF2, 0x4A
.byte 0x1A, 0xC3, 0x0F, 0x5A, 0x20, 0x48, 0x33, 0x99, 0xD9, 0xDB, 0x55, 0x07, 0xE9, 0x37, 0x3B, 0xF4
.byte 0xD0, 0x20, 0x11, 0xDC, 0xFE, 0xD4, 0xC9, 0x0D, 0x96, 0x0B, 0xB0, 0x6C, 0xA5, 0xA3, 0xB7, 0xC0
.byte 0x67, 0xC7, 0x1B, 0x87, 0x0F, 0x4E, 0x21, 0xE9, 0x2A, 0x76, 0xF1, 0x13, 0xAD, 0x2D, 0x08, 0x7D
.byte 0x4D, 0x1A, 0x5A, 0x4B, 0xEE, 0x24, 0x58, 0x85, 0x2F, 0x09, 0xF2, 0xD5, 0xAD, 0xA9, 0x95, 0x14
.byte 0x70, 0xB1, 0x9C, 0x80, 0x00, 0xBD, 0x69, 0x2A, 0x33, 0x5B, 0x3E, 0xE0, 0x88, 0x46, 0x5E, 0xD5
.byte 0x60, 0xB9, 0x21, 0x4F, 0xDD, 0x7A, 0xD5, 0x0C, 0x84, 0xC7, 0xE2, 0x32, 0x70, 0x78, 0x47, 0xE0
.byte 0x29, 0xE3, 0x61, 0x29, 0xA0, 0xCB, 0x54, 0xD4, 0x26, 0x93, 0xB5, 0xAE, 0xDA, 0x13, 0x84, 0x3B
.byte 0xCC, 0xA6, 0x8B, 0xAA, 0x21, 0x60, 0xB6, 0xA5, 0x27, 0x99, 0xD8, 0x97, 0x11, 0x1F, 0x78, 0x3A
.byte 0x02, 0xDA, 0x64, 0xA3, 0xA5, 0xB9, 0x77, 0xCB, 0x4D, 0x2D, 0x7A, 0x27, 0x40, 0xFF, 0x63, 0x0D
.byte 0xA5, 0xEE, 0xB7, 0xC7, 0x4E, 0x6E, 0x6C, 0x76, 0x07, 0x45, 0x0E, 0x19, 0x64, 0x87, 0x54, 0x67
.byte 0x61, 0xB9, 0x0A, 0x06, 0x72, 0x82, 0xD2, 0xBF, 0xB0, 0x4D, 0xE7, 0xF0, 0x4D, 0x4A, 0xFE, 0xF3
.byte 0x39, 0xB6, 0xBA, 0x87, 0x25, 0x27, 0xFE, 0x2C, 0x6C, 0x0C, 0x46, 0xD0, 0x94, 0x9A, 0x38, 0xF5
.byte 0x53, 0x43, 0xFC, 0xC5, 0xC6, 0xCF, 0x85, 0x76, 0x1D, 0x6D, 0x67, 0x6A, 0xB7, 0x65, 0x5D, 0xF0
.byte 0x1C, 0x18, 0x78, 0x41, 0x3F, 0x77, 0x6E, 0xAB, 0x84, 0xB4, 0x7C, 0x18, 0x4E, 0xB4, 0x0E, 0xA1
.byte 0xF8, 0x0A, 0x67, 0xBE, 0xDA, 0xED, 0x34, 0xF7, 0x5A, 0x9B, 0x62, 0x12, 0x01, 0xC0, 0x03, 0x1D
.byte 0xD8, 0x7C, 0x5E, 0x18, 0xF3, 0xCD, 0xC4, 0x77, 0x81, 0x40, 0x8F, 0xD0, 0xF5, 0x9E, 0x72, 0xEE
.byte 0xA8, 0xDA, 0xAC, 0x83, 0xC7, 0xE0, 0x7A, 0x22, 0x7C, 0xDC, 0x35, 0x7D, 0x9D, 0x39, 0x9A, 0x75
.byte 0xB5, 0xF9, 0x8D, 0xA8, 0xC6, 0x52, 0x20, 0x48, 0x93, 0xB0, 0x18, 0x89, 0x4E, 0x8B, 0x77, 0xF7
.byte 0x65, 0x23, 0x7A, 0x2D, 0x03, 0xF5, 0x4F, 0x7F, 0xD2, 0x85, 0xFD, 0x6F, 0xBE, 0x97, 0xE4, 0x73
.byte 0x91, 0x72, 0x1C, 0x58, 0xC4, 0x3D, 0xA1, 0x58, 0xED, 0xBA, 0xE1, 0x3C, 0x45, 0x58, 0x33, 0xAA
.byte 0x7B, 0xAE, 0xD7, 0x7F, 0xA3, 0x27, 0xFF, 0x75, 0xAC, 0xFC, 0xE4, 0x6B, 0x94, 0xC9, 0xDE, 0x25
.byte 0x3C, 0xFB, 0x7E, 0x01, 0x38, 0x1F, 0x59, 0x26, 0xDA, 0x3A, 0x63, 0x1F, 0x92, 0x96, 0xC9, 0x0E
.byte 0x45, 0xA1, 0x8D, 0xE8, 0xC8, 0x8C, 0x5D, 0x75, 0x88, 0x42, 0xE0, 0x1C, 0x0B, 0xBF, 0x42, 0x48
.byte 0xBA, 0xC1, 0x49, 0xF3, 0xE1, 0xA2, 0x1A, 0xBB, 0xDD, 0x7D, 0xDA, 0x6F, 0x13, 0xA4, 0x7D, 0x58
.byte 0x45, 0x0B, 0x41, 0x0E, 0x97, 0x9F, 0x83, 0x20, 0xE1, 0x64, 0x3D, 0xED, 0x23, 0x7F, 0x35, 0xDE
.byte 0x40, 0x7E, 0xD1, 0x22, 0x21, 0xEB, 0xDD, 0xFE, 0x68, 0xB8, 0x6E, 0x7C, 0x5C, 0xEC, 0xD5, 0xA2
.byte 0xF7, 0x17, 0xB0, 0x8F, 0xB6, 0x34, 0xAF, 0x97, 0x98, 0xED, 0x85, 0xBC, 0x6C, 0xBA, 0x9A, 0xAD
.byte 0x39, 0x6C, 0xCF, 0x5A, 0x57, 0xAD, 0x59, 0xC0, 0x65, 0xC7, 0x3D, 0xC2, 0xB4, 0x13, 0x64, 0xAC
.byte 0x2A, 0x15, 0x3B, 0xE0, 0x4A, 0xEB, 0x78, 0xE3, 0xD8, 0xFD, 0x9F, 0x45, 0xB8, 0x39, 0xF3, 0xF1
.byte 0xA5, 0xC3, 0x4C, 0xFD, 0x70, 0xA5, 0xBE, 0xD6, 0x6D, 0xFC, 0x98, 0x22, 0x0F, 0xFD, 0xCE, 0x3A
.byte 0x13, 0x0A, 0x1A, 0x5D, 0xF5, 0x93, 0x40, 0xCE, 0x90, 0xDF, 0x14, 0x49, 0x19, 0x07, 0x3A, 0xBF
.byte 0xCA, 0x87, 0xBD, 0x3A, 0x2D, 0x7B, 0x11, 0x9A, 0x78, 0xA9, 0xBD, 0x87, 0xA7, 0x8B, 0xC1, 0xBA
.byte 0x95, 0xDC, 0x18, 0x8B, 0x6F, 0x58, 0x5A, 0x00, 0x38, 0x6E, 0x49, 0x52, 0x75, 0x84, 0x11, 0x40
.byte 0x0B, 0xCF, 0x7A, 0x38, 0x4B, 0x8C, 0xD3, 0xC3, 0x36, 0x90, 0x4B, 0xDD, 0x1C, 0x0D, 0x98, 0xB2
.byte 0xE9, 0xB0, 0x3E, 0x59, 0x09, 0x98, 0x5A, 0x42, 0x07, 0xA3, 0x94, 0x7D, 0x28, 0xA6, 0xBD, 0x33
.byte 0x76, 0x37, 0x6C, 0xC1, 0xC4, 0x40, 0x84, 0xFA, 0xD1, 0xD0, 0xD7, 0xED, 0xDD, 0x6F, 0xA0, 0xC6
.byte 0x20, 0xDE, 0x20, 0x2A, 0x77, 0x7A, 0x6C, 0x7F, 0x1E, 0x01, 0xFC, 0x46, 0xA8, 0xB9, 0x7A, 0x1E
.byte 0xF1, 0xE7, 0xE0, 0xB5, 0x27, 0x65, 0xAF, 0xF8, 0x35, 0x87, 0xE6, 0x12, 0xF7, 0x86, 0xD9, 0x17
.byte 0x65, 0xFA, 0x41, 0xDD, 0x74, 0xAE, 0x5C, 0x92, 0xB0, 0x59, 0xD9, 0x59, 0x12, 0x53, 0x78, 0x03
.byte 0x3A, 0x58, 0xB9, 0x62, 0xBD, 0x68, 0x5A, 0xF3, 0xF0, 0x41, 0x06, 0xE7, 0xC8, 0xE0, 0xFE, 0x2E
.byte 0xDA, 0x40, 0x0B, 0x4E, 0xEF, 0x68, 0xE1, 0x9F, 0xC1, 0xBA, 0xF8, 0xD4, 0x0E, 0x70, 0xD8, 0x49
.byte 0xC9, 0x91, 0xAB, 0x87, 0xFA, 0x06, 0x7A, 0xEA, 0x48, 0x81, 0xD1, 0x10, 0x61, 0xD0, 0x3E, 0x3B
.byte 0x11, 0x4A, 0x8A, 0x00, 0xB3, 0x6C, 0xA0, 0x75, 0x27, 0x99, 0x49, 0x36, 0x09, 0x21, 0x7F, 0xD3
.byte 0xB3, 0x2B, 0x5A, 0xAE, 0x32, 0xD5, 0x98, 0x7A, 0x56, 0x6A, 0x8B, 0xB7, 0x3B, 0xC9, 0xF3, 0x4C
.byte 0x14, 0x7E, 0x4D, 0xC7, 0xEB, 0xED, 0x3C, 0x12, 0x86, 0x86, 0x48, 0x90, 0xA7, 0xC8, 0x63, 0x5B
.byte 0xF4, 0xBE, 0x09, 0x26, 0x93, 0xA2, 0xA1, 0xEA, 0x0D, 0x2C, 0xA1, 0x48, 0xF6, 0x95, 0x94, 0x0B
.byte 0x14, 0xE1, 0xD2, 0xFF, 0xCF, 0x0F, 0x11, 0x55, 0x95, 0x5A, 0xE6, 0x3D, 0x23, 0x49, 0x98, 0x17
.byte 0x08, 0xA2, 0x3E, 0x9B, 0x45, 0xE0, 0x85, 0x52, 0x0D, 0x27, 0x9A, 0x03, 0xBD, 0x2F, 0x0E, 0xD1
.byte 0x11, 0xE1, 0xD0, 0xE0, 0xF0, 0xE2, 0x35, 0x86, 0x3C, 0x1B, 0xC3, 0x5F, 0x65, 0x5C, 0x77, 0x6E
.byte 0xFF, 0xB5, 0x09, 0x44, 0x96, 0x8F, 0x96, 0xA3, 0xB7, 0x31, 0xA7, 0x74, 0x60, 0xB6, 0x45, 0x71
.byte 0x97, 0x16, 0x51, 0x88, 0xF8, 0x87, 0x0E, 0x35, 0xA3, 0xD2, 0x95, 0x09, 0x2F, 0x0C, 0x77, 0x2E
.byte 0xC2, 0x81, 0x73, 0x59, 0x10, 0x09, 0xFC, 0xC7, 0x3A, 0xA3, 0x3C, 0x9B, 0x59, 0x82, 0x0C, 0xF1
.byte 0x98, 0x5D, 0x79, 0x91, 0xE5, 0x88, 0xC7, 0x88, 0x5B, 0x5C, 0x91, 0x8A, 0x69, 0x09, 0xB9, 0x2C
.byte 0x8A, 0x2C, 0x85, 0x9A, 0x35, 0x81, 0x62, 0x70, 0x25, 0x9F, 0x0B, 0x7F, 0x21, 0x18, 0x70, 0xBA
.byte 0x75, 0xEA, 0x4B, 0x5B, 0x72, 0x12, 0xE3, 0xCD, 0x6F, 0x75, 0x58, 0xD9, 0x7E, 0x11, 0x05, 0x09
.byte 0x3D, 0x8B, 0xA3, 0x73, 0x0D, 0x06, 0xE4, 0x32, 0xA5, 0xEF, 0xB1, 0xC7, 0x07, 0x21, 0x81, 0x7D
.byte 0x0B, 0xCD, 0xD9, 0x7E, 0xE0, 0xBC, 0x4C, 0x4F, 0x32, 0xA4, 0x28, 0xB1, 0xB5, 0x2E, 0xBA, 0xF3
.byte 0xB9, 0x5E, 0x66, 0xC6, 0x65, 0x4A, 0xF9, 0x0A, 0x3A, 0xAA, 0xD2, 0x42, 0xCC, 0x53, 0xC0, 0xD8
.byte 0x20, 0x99, 0x56, 0x00, 0x56, 0xA2, 0x50, 0x88, 0x47, 0x79, 0x3A, 0xFD, 0xA7, 0xF4, 0xF0, 0x61
.byte 0x52, 0x57, 0x28, 0xB7, 0xA1, 0x21, 0xC2, 0xDC, 0xCB, 0x94, 0x1F, 0x97, 0xE8, 0xE0, 0x70, 0x08
.byte 0x79, 0xC6, 0x09, 0xD0, 0x69, 0x59, 0x59, 0xB1, 0xD2, 0x93, 0xAE, 0x7A, 0x87, 0x9E, 0xDB, 0xDA
.byte 0xF5, 0x03, 0x92, 0x97, 0x24, 0x55, 0x74, 0xF0, 0xEA, 0x93, 0x88, 0xD2, 0x74, 0xF8, 0xDB, 0xED
.byte 0xBF, 0xE5, 0xBD, 0x28, 0x3F, 0x17, 0xD9, 0x12, 0xAA, 0x88, 0x8C, 0x32, 0x27, 0x68, 0x0D, 0x1C
.byte 0x6C, 0x9F, 0xB4, 0x91, 0xF5, 0x29, 0x81, 0xDF, 0xBD, 0x0A, 0xB2, 0x31, 0x02, 0x8E, 0x1F, 0xC1
.byte 0x73, 0xDC, 0xEA, 0xB3, 0xF4, 0xC4, 0xC5, 0x9E, 0x4C, 0x51, 0xD0, 0x73, 0xBA, 0xDE, 0x90, 0x26
.byte 0x7E, 0x45, 0xB7, 0x73, 0x6E, 0x38, 0x53, 0x2C, 0x42, 0x06, 0x5D, 0x45, 0x94, 0x7C, 0x07, 0x08
.byte 0x59, 0xF1, 0xBB, 0x4D, 0xB6, 0x80, 0xEC, 0x03, 0xD2, 0xBD, 0x77, 0x8C, 0x9B, 0x08, 0xB2, 0x19
.byte 0x4D, 0x6A, 0x8D, 0xBC, 0xA2, 0xE0, 0xE8, 0xE5, 0xE6, 0x46, 0x2B, 0x7B, 0xC2, 0x32, 0x84, 0x1C
.byte 0x24, 0x3F, 0x6A, 0xDB, 0xC0, 0x56, 0xDE, 0x93, 0x13, 0x56, 0x20, 0xAE, 0x5E, 0xD3, 0xC8, 0xAB
.byte 0x3D, 0x55, 0x68, 0xE0, 0x35, 0x51, 0xC6, 0x1C, 0x97, 0xF1, 0x98, 0x5A, 0x24, 0x1C, 0x76, 0x49
.byte 0x5C, 0xE0, 0x24, 0x1D, 0x37, 0x03, 0xB0, 0x4A, 0x59, 0xD1, 0xF9, 0xB7, 0xA4, 0xC1, 0x63, 0xE1
.byte 0x17, 0xCB, 0xC1, 0x4D, 0x1D, 0x87, 0x69, 0xB4, 0x79, 0x02, 0x0E, 0x9D, 0x1E, 0x85, 0xE6, 0x7A
.byte 0x66, 0x0A, 0x98, 0x9E, 0x0E, 0x49, 0xE8, 0x67, 0x1A, 0xE2, 0x1F, 0xBE, 0xA3, 0x82, 0x9F, 0xBB
.byte 0x4E, 0x60, 0x08, 0x6B, 0xE8, 0x72, 0x20, 0x61, 0x74, 0x2F, 0xFE, 0x92, 0xB5, 0xE5, 0x0D, 0x1B
.byte 0xF0, 0xA6, 0xB9, 0xFE, 0xEF, 0xA2, 0x66, 0x09, 0x84, 0x85, 0xC7, 0x28, 0x08, 0x67, 0xE3, 0x57
.byte 0xC8, 0xEC, 0xC2, 0xB0, 0x5E, 0xE3, 0x12, 0xD2, 0x12, 0x11, 0x65, 0xC7, 0xF6, 0x73, 0xE3, 0xE6
.byte 0x19, 0x9D, 0xE5, 0x08, 0x40, 0x4B, 0x12, 0xC5, 0xD1, 0xDA, 0xED, 0xD9, 0x41, 0xD1, 0x30, 0x09
.byte 0xBD, 0xF3, 0xBA, 0x1C, 0xD7, 0xCD, 0xEE, 0xE9, 0xDE, 0x54, 0xB1, 0xD4, 0xC7, 0x95, 0xBB, 0xE1
.byte 0x33, 0xA1, 0xEA, 0x73, 0xED, 0xFC, 0x39, 0xBE, 0xD6, 0x26, 0x98, 0x18, 0xF8, 0xC9, 0x21, 0xB6
.byte 0xBD, 0xDC, 0xD2, 0x94, 0xA9, 0xC1, 0x7E, 0x87, 0x16, 0x2F, 0x5C, 0xDD, 0xC5, 0x18, 0xBF, 0xF8
.byte 0xBA, 0xA9, 0x6C, 0xA7, 0xA5, 0xA5, 0x66, 0x7C, 0xCC, 0xFE, 0x94, 0xC5, 0xC8, 0xB6, 0x7B, 0x85
.byte 0x92, 0x4E, 0x19, 0x3C, 0x10, 0x97, 0xC4, 0x26, 0xC7, 0x21, 0x04, 0x8C, 0x39, 0xC3, 0x85, 0xF4
.byte 0x6C, 0xF2, 0x9C, 0x12, 0x97, 0x02, 0x8E, 0x64, 0x01, 0x23, 0x29, 0xC9, 0xD9, 0xA5, 0x4E, 0x6C
.byte 0xF4, 0x68, 0xA8, 0x04, 0xFF, 0x6C, 0x2B, 0xC7, 0x8D, 0x2F, 0x54, 0xC7, 0xF2, 0xD9, 0xBB, 0x5F
.byte 0xCB, 0x57, 0x71, 0x63, 0x5A, 0x00, 0xC8, 0x5B, 0x24, 0xF2, 0x25, 0xFD, 0x97, 0x73, 0x69, 0x8C
.byte 0xDC, 0x11, 0x91, 0xDB, 0x7E, 0xBC, 0xA3, 0x0C, 0xEB, 0xF7, 0xD3, 0xDE, 0xD0, 0x8F, 0x3D, 0x9C
.byte 0xE7, 0xAF, 0x00, 0x41, 0xB0, 0xC8, 0x9C, 0xD4, 0xBA, 0xC1, 0xD1, 0x52, 0x35, 0x3B, 0xDE, 0x11
.byte 0x4D, 0x6F, 0xED, 0xCB, 0x2C, 0x90, 0xD7, 0x17, 0x87, 0xAB, 0xF5, 0x58, 0x3A, 0x33, 0xF4, 0x21
.byte 0xE2, 0xF4, 0x62, 0x92, 0xBD, 0xFF, 0x67, 0x77, 0xC1, 0x38, 0xC9, 0xF7, 0x74, 0xA8, 0x09, 0xC1
.byte 0x18, 0xF7, 0x8D, 0x44, 0x87, 0x64, 0x5B, 0x0F, 0x10, 0x51, 0x67, 0x4A, 0x84, 0x5C, 0x6C, 0x67
.byte 0x51, 0xCF, 0xFA, 0x0E, 0xCF, 0x61, 0x86, 0x91, 0x9A, 0x4F, 0x88, 0x0E, 0xF8, 0x92, 0xCF, 0x10
.byte 0x89, 0x5D, 0x54, 0x10, 0xC1, 0xB0, 0x20, 0xD2, 0x02, 0x87, 0x1D, 0x86, 0xE3, 0x89, 0xEE, 0x35
.byte 0x59, 0xE8, 0x43, 0x28, 0x49, 0xC9, 0xB9, 0xE4, 0x19, 0x42, 0xF2, 0x12, 0xD5, 0xC2, 0x22, 0x5E
.byte 0x1F, 0x77, 0x6F, 0xE1, 0x28, 0x8F, 0xB3, 0x2A, 0x16, 0xD1, 0xB0, 0xFA, 0x5A, 0x9E, 0x2F, 0xB4
.byte 0x87, 0x73, 0xDD, 0xD1, 0x3D, 0x97, 0xB5, 0x56, 0xD9, 0xA8, 0x69, 0xAE, 0x6B, 0x8B, 0x0D, 0x8A
.byte 0x03, 0x7C, 0x6C, 0x2B, 0x0B, 0x20, 0x55, 0x22, 0xF1, 0x06, 0x1D, 0x4C, 0xA5, 0x4D, 0x00, 0x2C
.byte 0xC0, 0xDD, 0xFD, 0xFE, 0x74, 0xB3, 0x55, 0x4E, 0x5C, 0xBE, 0xFD, 0xC7, 0x49, 0x0A, 0x52, 0x4C
.byte 0x87, 0xBE, 0x78, 0x92, 0xDF, 0xCD, 0xB5, 0xD0, 0xD4, 0xD2, 0x1D, 0x79, 0x1F, 0x1E, 0xA5, 0xE0
.byte 0xFB, 0xA3, 0xDE, 0x70, 0x57, 0x33, 0xBF, 0xB3, 0xF1, 0xBD, 0x7A, 0x3B, 0xC8, 0xCC, 0x88, 0x4F
.byte 0x8B, 0x00, 0xE2, 0x6A, 0xCE, 0x97, 0x3B, 0xA2, 0x69, 0x58, 0x1B, 0x89, 0x76, 0xC1, 0x69, 0x72
.byte 0x65, 0x47, 0xE3, 0xBD, 0x7B, 0xA3, 0x70, 0x6C, 0x60, 0xEB, 0xA7, 0x28, 0xB8, 0x2F, 0x78, 0x44
.byte 0x30, 0x5A, 0xAE, 0xFE, 0xF2, 0xEA, 0xA0, 0x5B, 0x43, 0xBC, 0xE5, 0xBA, 0x7D, 0x4E, 0x2D, 0xE3
.byte 0x96, 0x10, 0xA0, 0x11, 0xB4, 0x10, 0x7E, 0x14, 0xFC, 0x26, 0x3D, 0xB4, 0x55, 0xB5, 0xF9, 0x86
.byte 0x10, 0xA8, 0x84, 0x02, 0x92, 0x25, 0x5E, 0xD6, 0xE1, 0x43, 0x90, 0x5F, 0x92, 0xBD, 0x42, 0x28
.byte 0xCE, 0xE2, 0x3A, 0x82, 0xF3, 0xB9, 0x97, 0xF0, 0xDF, 0xD4, 0xA5, 0x35, 0x8A, 0x9E, 0xBB, 0x9A
.byte 0x46, 0x3F, 0x9D, 0xD8, 0x64, 0xFB, 0xAE, 0x46, 0x3E, 0x3F, 0xA5, 0xD0, 0xFC, 0xE7, 0xF9, 0xCB
.byte 0xCA, 0x34, 0x4D, 0xBD, 0xED, 0xE4, 0xAE, 0xCC, 0xB9, 0x53, 0x02, 0x43, 0xF1, 0xBD, 0xDE, 0x37
.byte 0xFD, 0x7B, 0x10, 0x62, 0x76, 0xBE, 0xA8, 0xB4, 0xFE, 0x4E, 0x85, 0xFA, 0x35, 0x7F, 0xC5, 0x00
.byte 0xB3, 0x13, 0xBE, 0xA1, 0xF7, 0x6C, 0x6D, 0xB1, 0xBF, 0x70, 0xF4, 0xB0, 0x2D, 0xD2, 0xE7, 0x2B
.byte 0x4E, 0xF7, 0x8D, 0xC4, 0xB6, 0x36, 0x79, 0xB4, 0x84, 0xFF, 0xAF, 0xBA, 0x7E, 0x75, 0xBB, 0x31
.byte 0x89, 0x79, 0xD2, 0x81, 0xE5, 0x40, 0x32, 0xA5, 0xB1, 0x26, 0x55, 0xDE, 0xF9, 0x3D, 0x0A, 0x47
.byte 0x35, 0x98, 0x0C, 0xEC, 0xCE, 0x85, 0xA1, 0x53, 0x85, 0x51, 0x0E, 0x03, 0xC6, 0xC9, 0x35, 0x50
.byte 0x43, 0x08, 0xD1, 0x29, 0x49, 0x03, 0xCE, 0xFA, 0x2A, 0x24, 0xD9, 0x24, 0x61, 0xE3, 0x6C, 0x97
.byte 0x7B, 0x78, 0x83, 0x4A, 0xFE, 0x24, 0x9E, 0x83, 0x75, 0xAD, 0x86, 0x3C, 0x77, 0xBC, 0x8C, 0xBA
.byte 0xC4, 0x5D, 0xE4, 0x0D, 0x61, 0xB2, 0x07, 0x8B, 0xD6, 0xE0, 0xB0, 0x38, 0xC4, 0x1C, 0xCF, 0x40
.byte 0x94, 0x52, 0x8B, 0x93, 0x76, 0x29, 0x17, 0xEC, 0xD7, 0x9E, 0x29, 0x4E, 0x5A, 0xB5, 0x09, 0x1E
.byte 0x13, 0xED, 0x2C, 0x74, 0x9F, 0x33, 0x00, 0x76, 0x14, 0xB1, 0xAE, 0xD9, 0xCD, 0x7D, 0x19, 0x62
.byte 0xD0, 0xA4, 0xF5, 0x47, 0xCE, 0x0C, 0x33, 0xA5, 0xAA, 0x5C, 0xF3, 0x05, 0x12, 0xFD, 0x23, 0x25
.byte 0xEA, 0x50, 0x9A, 0x8A, 0x84, 0x9B, 0x01, 0x98, 0x4C, 0xAF, 0x72, 0x1A, 0x2D, 0x8B, 0x7C, 0xFD
.byte 0x30, 0x72, 0x44, 0xFE, 0x7F, 0x78, 0xA3, 0x2A, 0xD4, 0x97, 0x2F, 0xE7, 0x94, 0x53, 0x0D, 0x7F
.byte 0xA4, 0xA8, 0x09, 0x28, 0x43, 0x0A, 0xC1, 0x90, 0xBA, 0x33, 0xAB, 0xE7, 0xBE, 0x28, 0xE5, 0xEE
.byte 0x9A, 0x29, 0xEC, 0x1A, 0xA1, 0x90, 0x45, 0x76, 0x27, 0x75, 0x5E, 0xBC, 0xC8, 0x6B, 0x3B, 0x6D
.byte 0x13, 0x45, 0x95, 0x57, 0x50, 0x56, 0xE8, 0x0A, 0x89, 0x93, 0xF2, 0x48, 0xBB, 0xD7, 0x37, 0x56
.byte 0x01, 0x24, 0x70, 0xA3, 0xB4, 0xB5, 0x19, 0xDC, 0x2B, 0x78, 0x98, 0xF3, 0xE3, 0xD4, 0x60, 0xF6
.byte 0x19, 0xF6, 0x4E, 0x69, 0x4C, 0x36, 0x74, 0xD6, 0xC9, 0x66, 0x1E, 0x85, 0x3E, 0x56, 0xDB, 0x3F
.byte 0x7A, 0x4B, 0xE2, 0x2F, 0x01, 0xFC, 0x0B, 0x2C, 0x74, 0xA4, 0x20, 0x58, 0x78, 0x81, 0x4E, 0x92
.byte 0x78, 0x9D, 0xFC, 0xC4, 0xD3, 0x70, 0x9A, 0x9D, 0xD7, 0xB9, 0x22, 0x16, 0x0F, 0xFD, 0x55, 0x89
.byte 0x49, 0x38, 0xB8, 0x4B, 0x35, 0xC4, 0x78, 0xA9, 0x69, 0x99, 0x01, 0xE1, 0x1A, 0x50, 0x74, 0x92
.byte 0xED, 0x70, 0x57, 0xC1, 0xE1, 0xF2, 0x5E, 0xB9, 0xAB, 0x80, 0xCF, 0xBB, 0x7D, 0x25, 0x44, 0xC7
.byte 0x5D, 0xFD, 0x12, 0x92, 0xC2, 0x8A, 0x3C, 0x2B, 0x23, 0x3E, 0x0D, 0x3E, 0x8F, 0x81, 0xD1, 0x7D
.byte 0xF2, 0x29, 0x3E, 0xD4, 0x1B, 0x9C, 0x8D, 0xC7, 0x1C, 0x5D, 0x82, 0x9A, 0x82, 0xC7, 0x61, 0xE0
.byte 0xC5, 0x73, 0x73, 0x87, 0xFE, 0xAF, 0xB2, 0x22, 0xEE, 0xC0, 0x60, 0x7D, 0x41, 0x32, 0xFA, 0x34
.byte 0x5B, 0x39, 0x08, 0x76, 0xD5, 0x95, 0x3E, 0xF2, 0xF2, 0xC0, 0x8C, 0x74, 0x87, 0xEE, 0x55, 0x4C
.byte 0x62, 0xC8, 0xD4, 0x60, 0x77, 0x87, 0x82, 0x66, 0x47, 0xE3, 0xE4, 0x89, 0x15, 0xDF, 0xBD, 0x71
.byte 0x18, 0xC5, 0xE8, 0xED, 0x5A, 0x26, 0xE0, 0x4D, 0xE6, 0x6D, 0xC2, 0x6E, 0x5B, 0x17, 0xBB, 0xBD
.byte 0xDF, 0x8F, 0x1E, 0x57, 0x16, 0xA1, 0xBE, 0x5D, 0x84, 0xA2, 0xE7, 0x9A, 0x81, 0xA4, 0x0B, 0x99
.byte 0x69, 0xF4, 0x87, 0xC4, 0x1A, 0x68, 0x11, 0x01, 0xD5, 0xD4, 0x6F, 0x30, 0xEC, 0x2B, 0xEE, 0xCB
.byte 0xBA, 0x0C, 0x23, 0xD1, 0xAD, 0xE1, 0x2F, 0x32, 0x84, 0x16, 0xCC, 0x05, 0xBA, 0xD8, 0x9F, 0x24
.byte 0xCC, 0x27, 0xE8, 0xE7, 0x8F, 0xFA, 0xE8, 0x65, 0xCE, 0x58, 0x95, 0xBA, 0x83, 0x84, 0x86, 0x3E
.byte 0x90, 0xAA, 0x0F, 0x3E, 0x8C, 0x3F, 0x70, 0x10, 0x55, 0x3C, 0x16, 0x10, 0x15, 0xB6, 0x34, 0xE1
.byte 0xDE, 0x1C, 0xC8, 0x6D, 0x16, 0xB1, 0xD3, 0xE5, 0x09, 0x68, 0xA0, 0x8D, 0xEC, 0x26, 0xCB, 0x7D
.byte 0xD1, 0xDB, 0xBB, 0x5D, 0x1A, 0x2C, 0x6E, 0x70, 0x69, 0x84, 0x80, 0x7E, 0x3B, 0xB4, 0x60, 0x19
.byte 0xD1, 0x28, 0x87, 0xE8, 0xDA, 0x5A, 0xCD, 0xE3, 0xC3, 0x6E, 0x71, 0xB0, 0x94, 0x3C, 0x2E, 0x66
.byte 0x18, 0xE9, 0xC3, 0x33, 0x16, 0x31, 0xA3, 0x7F, 0xB6, 0x24, 0xFE, 0xF2, 0xD9, 0x5E, 0x0B, 0xAA
.byte 0x87, 0x93, 0x92, 0x61, 0xED, 0x60, 0x45, 0xB1, 0xCE, 0xB6, 0x61, 0x63, 0xF3, 0x8F, 0xC9, 0x0B
.byte 0x79, 0x8D, 0x3E, 0x8F, 0xBE, 0xE2, 0x0F, 0x75, 0x07, 0x0D, 0x67, 0xE0, 0x6B, 0x73, 0x8A, 0xF2
.byte 0x06, 0x1D, 0x54, 0xF4, 0x7D, 0x99, 0xA5, 0x4C, 0x4F, 0x07, 0xAF, 0x42, 0x96, 0x79, 0x4E, 0x10
.byte 0x06, 0x8D, 0xA0, 0xC5, 0x6F, 0xAF, 0x3B, 0x77, 0xBD, 0xA2, 0x57, 0x29, 0x15, 0xE1, 0x1B, 0x1C
.byte 0xFF, 0x70, 0x10, 0x7D, 0x09, 0xB5, 0xC9, 0x58, 0xBC, 0x79, 0x9B, 0x53, 0xF3, 0xE9, 0x63, 0xF9
.byte 0x76, 0x04, 0xBF, 0xE6, 0xB4, 0xFA, 0x5D, 0x71, 0x9D, 0xB4, 0x9A, 0xB3, 0x96, 0xB6, 0xCF, 0x96
.byte 0x26, 0xDF, 0x13, 0x30, 0x94, 0xDD, 0x88, 0x51, 0x56, 0x24, 0xA4, 0x4A, 0x0D, 0x08, 0x44, 0x84
.byte 0x0D, 0x03, 0x6B, 0xC1, 0xFE, 0xC8, 0x32, 0x9B, 0x7D, 0xCD, 0x4E, 0x14, 0x84, 0x1D, 0xAA, 0xAB
.byte 0xFD, 0xBE, 0xDB, 0x92, 0x9B, 0x64, 0xE3, 0xF2, 0x88, 0x88, 0x3C, 0x96, 0x91, 0x80, 0x1A, 0x9E
.byte 0x84, 0x86, 0x5F, 0x82, 0x4F, 0x92, 0x1E, 0xCC, 0x5F, 0x6D, 0xE1, 0xE4, 0x8B, 0x8C, 0x8F, 0x88
.byte 0x4A, 0x6B, 0x1A, 0xE5, 0xCF, 0xFD, 0xD7, 0x58, 0x86, 0x14, 0xEE, 0x17, 0x94, 0x09, 0xB5, 0x19
.byte 0x8F, 0x14, 0x9C, 0xDE, 0xA6, 0xBA, 0xAB, 0x06, 0x28, 0x8D, 0xEB, 0xB3, 0x19, 0x7A, 0x3B, 0x63
.byte 0xE6, 0x56, 0x49, 0xB5, 0x54, 0x20, 0x0E, 0xDA, 0x34, 0xFC, 0xF1, 0xC9, 0x06, 0xA7, 0xE2, 0x96
.byte 0xBB, 0x7E, 0x74, 0x62, 0x39, 0x20, 0x69, 0x61, 0xAD, 0x54, 0x14, 0xC6, 0xCF, 0x50, 0x2A, 0xB5
.byte 0xA6, 0x73, 0x6B, 0xFA, 0x93, 0x79, 0xD5, 0xC8, 0x76, 0xC6, 0x92, 0x7C, 0x6D, 0x74, 0x12, 0x29
.byte 0xF3, 0x87, 0x8C, 0x2D, 0xA7, 0xF5, 0x8E, 0x55, 0x49, 0xA3, 0x1B, 0x18, 0xF3, 0x45, 0xCD, 0x9A
.byte 0xB8, 0x38, 0x95, 0x4C, 0xB1, 0x6A, 0x15, 0x28, 0x31, 0xA7, 0xA5, 0x9F, 0x1C, 0xB7, 0xC9, 0x0F
.byte 0x3F, 0x55, 0x3C, 0xE7, 0x4A, 0xCB, 0x3C, 0x93, 0x6E, 0x57, 0xAC, 0x62, 0x9D, 0x7A, 0xFC, 0x56
.byte 0xB2, 0x91, 0xA2, 0x64, 0xFC, 0xB7, 0x8C, 0x2D, 0x5F, 0x32, 0xCC, 0x7B, 0xE9, 0x95, 0x8B, 0x29
.byte 0xEB, 0xC8, 0x10, 0x35, 0x93, 0x4D, 0xC9, 0x01, 0xA5, 0x75, 0x63, 0x42, 0xEF, 0x60, 0x99, 0xA2
.byte 0xF1, 0x3C, 0x07, 0xED, 0xF4, 0x94, 0x1B, 0x53, 0xC6, 0xE8, 0xCE, 0xB0, 0x7E, 0x5A, 0xD9, 0x69
.byte 0x22, 0xEA, 0x9E, 0xB5, 0x38, 0x68, 0xB6, 0xDD, 0xDE, 0x1A, 0x20, 0xCE, 0x7A, 0xB9, 0x70, 0x6C
.byte 0xF5, 0x78, 0x5A, 0xE9, 0x0C, 0x75, 0x3D, 0xD2, 0x5D, 0x0C, 0x83, 0xDC, 0x66, 0x5D, 0x45, 0x88
.byte 0x47, 0xE4, 0x3D, 0x80, 0x4C, 0xF4, 0x5D, 0x2A, 0x0E, 0x7E, 0xF8, 0x89, 0x38, 0x69, 0xF6, 0x2E
.byte 0xE1, 0x50, 0x18, 0xED, 0xC6, 0x55, 0xC0, 0x24, 0x61, 0x43, 0x00, 0xC7, 0xA0, 0x45, 0x50, 0xE8
.byte 0x2A, 0x8D, 0x69, 0x76, 0x81, 0xC7, 0xA1, 0x90, 0x45, 0x9A, 0x1A, 0x7E, 0x04, 0x10, 0xAC, 0xE5
.byte 0x61, 0xC5, 0xD3, 0x27, 0x1B, 0x94, 0x4C, 0x7C, 0xD8, 0x4C, 0x44, 0x79, 0x92, 0x94, 0x61, 0xBC
.byte 0x22, 0xCA, 0x33, 0xA3, 0x92, 0xD5, 0x34, 0xD7, 0x6F, 0x4F, 0x55, 0x73, 0x5F, 0x02, 0x59, 0xC1
.byte 0xC7, 0x2D, 0xE9, 0xE2, 0xC1, 0x35, 0x5F, 0x99, 0x82, 0xA4, 0x12, 0x14, 0x39, 0x74, 0xD1, 0x5B
.byte 0x3F, 0x05, 0xFF, 0xD1, 0xDA, 0x33, 0xA9, 0x4A, 0x82, 0xFF, 0xBE, 0xE2, 0x02, 0x18, 0xA4, 0xCA
.byte 0x45, 0x8D, 0xAD, 0x07, 0xC2, 0x0C, 0xA0, 0x45, 0xB1, 0xB3, 0x59, 0xEA, 0x28, 0x2B, 0x45, 0x67
.byte 0x31, 0x44, 0x39, 0x0C, 0x78, 0xE3, 0x57, 0xFB, 0xE2, 0x15, 0xDE, 0xE4, 0x2E, 0x82, 0xAE, 0x74
.byte 0x0F, 0x5B, 0x7B, 0xD2, 0x68, 0x1C, 0x17, 0x19, 0xCF, 0x71, 0x04, 0xF8, 0x9D, 0x49, 0x60, 0xCE
.byte 0x8E, 0x99, 0xDA, 0x07, 0x7C, 0x31, 0x02, 0x5F, 0x47, 0xE1, 0x43, 0x75, 0x63, 0xF2, 0xE9, 0x72
.byte 0x4D, 0x65, 0x44, 0xB6, 0x81, 0x5C, 0xCF, 0x51, 0xCD, 0xD3, 0x49, 0x6A, 0x1D, 0xA9, 0x39, 0xAC
.byte 0x43, 0x13, 0xB3, 0xC0, 0x45, 0xB6, 0x1F, 0x8D, 0x97, 0x63, 0x03, 0xFB, 0x55, 0xED, 0x6D, 0xA3
.byte 0x52, 0xB2, 0x59, 0xD3, 0x0F, 0x29, 0x24, 0xDC, 0xFD, 0x6E, 0x47, 0x1B, 0x18, 0x80, 0xC7, 0x5B
.byte 0x94, 0x7B, 0x1C, 0xDA, 0x32, 0x3C, 0x67, 0xCA, 0x9F, 0x6A, 0xC5, 0xF5, 0x58, 0x33, 0x99, 0xAA
.byte 0xE6, 0xF3, 0x7E, 0xF5, 0x1C, 0xA3, 0xD2, 0x1A, 0x11, 0x1A, 0x35, 0x29, 0x9B, 0xFD, 0x85, 0x30
.byte 0x78, 0xA2, 0x0A, 0xAB, 0xDE, 0x72, 0x76, 0x7E, 0xDD, 0x3B, 0x74, 0x35, 0x6F, 0x0D, 0xDF, 0x55
.byte 0x00, 0x5D, 0x4B, 0x1D, 0x00, 0x1E, 0x37, 0x12, 0x38, 0x6D, 0x3C, 0xD3, 0x6A, 0xC2, 0x03, 0xE3
.byte 0x64, 0x0E, 0x8E, 0x43, 0x80, 0x05, 0xC1, 0x5D, 0x40, 0x36, 0x93, 0xB0, 0x43, 0x73, 0x06, 0x44
.byte 0xD1, 0x52, 0x61, 0xD2, 0x70, 0x99, 0xE4, 0xA8, 0x06, 0x21, 0x7C, 0x71, 0xE3, 0x80, 0x54, 0x48
.byte 0x8E, 0xE3, 0x8B, 0x0F, 0xE8, 0x4D, 0x6D, 0x29, 0x83, 0x00, 0xD9, 0xC6, 0x73, 0xE0, 0x0B, 0x45
.byte 0x32, 0x6D, 0x17, 0xA2, 0x06, 0xFB, 0x4B, 0x0D, 0x1D, 0xC7, 0x7E, 0x00, 0x48, 0xD2, 0x48, 0xD6
.byte 0xB6, 0xD3, 0xE5, 0x9E, 0x21, 0x52, 0xC7, 0xA4, 0x52, 0xA1, 0x6B, 0xC6, 0x81, 0x76, 0x0B, 0xB3
.byte 0xE3, 0x22, 0x56, 0xEA, 0x1E, 0xA1, 0xF8, 0x3B, 0x69, 0x76, 0x3C, 0xB1, 0x49, 0x84, 0x87, 0xFF
.byte 0x58, 0x6D, 0x9E, 0x79, 0xBF, 0x65, 0x1E, 0x12, 0x07, 0x89, 0xD9, 0x88, 0xFF, 0xE4, 0x3C, 0xE3
.byte 0x07, 0x92, 0xCD, 0x26, 0x33, 0xC5, 0x62, 0x9D, 0x3C, 0x9E, 0x4E, 0x86, 0x23, 0xD6, 0x86, 0x7C
.byte 0x43, 0x24, 0xF6, 0x02, 0x8A, 0x15, 0x15, 0x91, 0x9E, 0xEE, 0x19, 0x9E, 0xD3, 0x56, 0x81, 0xDB
.byte 0xE8, 0x4F, 0x01, 0x1C, 0x14, 0x64, 0xB9, 0x51, 0x03, 0x07, 0xD7, 0x27, 0xDD, 0x5D, 0xA4, 0x21
.byte 0x82, 0x9A, 0x24, 0x0C, 0xAF, 0x39, 0x9D, 0x4E, 0x28, 0xB7, 0xEC, 0xFB, 0x0D, 0x6D, 0xD6, 0xF6
.byte 0xBC, 0xD8, 0x12, 0xD1, 0x3C, 0xCB, 0x23, 0x40, 0xD3, 0xFB, 0x67, 0xB1, 0x58, 0x0B, 0xD2, 0xDA
.byte 0xA6, 0xF6, 0xE7, 0x56, 0x30, 0x85, 0xA4, 0x58, 0x3C, 0x90, 0x54, 0x4A, 0xFE, 0x2A, 0x41, 0xBA
.byte 0x03, 0x53, 0x8C, 0x3F, 0x1F, 0xAF, 0x7F, 0xF2, 0xAA, 0xE7, 0xA3, 0x03, 0xF2, 0x76, 0xDE, 0x98
.byte 0x6C, 0xC6, 0xEE, 0x9D, 0x4B, 0x93, 0xF5, 0x88, 0x23, 0x49, 0xD2, 0x22, 0x74, 0x14, 0xDD, 0x77
.byte 0x67, 0x69, 0xB7, 0x86, 0x19, 0x37, 0x78, 0xC4, 0x1E, 0x1C, 0xC8, 0x11, 0x92, 0xA7, 0xAA, 0xFF
.byte 0x6D, 0x99, 0x9D, 0xB8, 0x2C, 0x93, 0x40, 0x50, 0xDC, 0x13, 0x72, 0x51, 0x27, 0x4F, 0xC8, 0x8F
.byte 0xB8, 0x80, 0x15, 0xD2, 0xB7, 0x8E, 0x97, 0xD6, 0xAB, 0x5F, 0xE7, 0x3E, 0x06, 0x91, 0x3E, 0x74
.byte 0x2A, 0xDB, 0x2D, 0x57, 0x6E, 0x6D, 0xA7, 0x4B, 0x81, 0x19, 0x9C, 0xA9, 0x68, 0x65, 0x38, 0x21
.byte 0xE6, 0x4E, 0xF4, 0x9D, 0xDD, 0x8B, 0x74, 0x89, 0xEB, 0x5C, 0xC7, 0xF2, 0xED, 0x05, 0x66, 0x18
.byte 0xE1, 0x93, 0x6F, 0x4F, 0x01, 0x17, 0x9A, 0x83, 0x30, 0x37, 0x2D, 0x99, 0x9C, 0x66, 0xBB, 0x83
.byte 0xB4, 0xAF, 0x21, 0x92, 0x3B, 0x95, 0x1B, 0x26, 0xF1, 0xE3, 0x19, 0xDF, 0xE8, 0x7F, 0xF8, 0xC9
.byte 0x13, 0x68, 0x19, 0x15, 0x7F, 0xB3, 0x98, 0xB0, 0xEB, 0xC6, 0x49, 0x88, 0x2C, 0x05, 0x0B, 0xE1
.byte 0xB4, 0x2C, 0x73, 0xF0, 0xC1, 0x8F, 0x17, 0xB3, 0x72, 0x30, 0x93, 0x5B, 0xAF, 0x8B, 0x25, 0xC3
.byte 0xF3, 0x3E, 0xD8, 0x73, 0xF2, 0x71, 0x23, 0xDD, 0x37, 0x6C, 0x65, 0x64, 0x72, 0x70, 0x45, 0x26
.byte 0x9C, 0xB9, 0x17, 0x5E, 0x48, 0x2E, 0x12, 0xBB, 0x5E, 0xA5, 0x17, 0x0E, 0x30, 0x3C, 0xD1, 0x24
.byte 0x7B, 0xAA, 0x97, 0x6D, 0x1B, 0xBA, 0x4A, 0x53, 0x27, 0xB0, 0xB7, 0x99, 0x21, 0xFD, 0xC0, 0xBE
.byte 0xB6, 0xD8, 0x1C, 0xFF, 0x06, 0x2E, 0xBB, 0x64, 0xD3, 0xD2, 0x72, 0x04, 0x0F, 0x44, 0x28, 0x8A
.byte 0xEE, 0xC0, 0xF7, 0x0A, 0x7B, 0x42, 0x5E, 0xA3, 0xF3, 0x16, 0x3D, 0x14, 0x13, 0xFD, 0xD2, 0xC9
.byte 0xD6, 0xEF, 0xC9, 0xDC, 0x1E, 0x84, 0x40, 0xF2, 0x57, 0xB3, 0xF6, 0x66, 0xF7, 0x1F, 0xF0, 0xE6
.byte 0xE0, 0xE8, 0xF1, 0x5B, 0x2B, 0x4F, 0xFE, 0x1E, 0x65, 0x3B, 0x33, 0x78, 0x39, 0x06, 0x42, 0x0F
.byte 0xF6, 0x0B, 0xEC, 0x14, 0x90, 0x2C, 0x07, 0xE7, 0xE0, 0xFE, 0x4D, 0xD8, 0x1D, 0x3E, 0xBE, 0xFE
.byte 0x27, 0xB0, 0x59, 0x52, 0xFF, 0x58, 0x71, 0x65, 0x94, 0xA5, 0xDD, 0xCD, 0xAC, 0x20, 0xDD, 0xA2
.byte 0x2C, 0xC9, 0xB7, 0xBC, 0xF6, 0xBE, 0xA4, 0xD7, 0xBC, 0xF1, 0xAF, 0xDA, 0x30, 0x6E, 0xD8, 0x57
.byte 0x1E, 0x32, 0xAA, 0x1E, 0x8A, 0x1B, 0x83, 0x1E, 0xC1, 0x61, 0xEC, 0x6D, 0x81, 0xCA, 0x0F, 0xAD
.byte 0x94, 0xC6, 0x6A, 0x8B, 0x85, 0x0E, 0x62, 0x42, 0x00, 0x12, 0x1C, 0x30, 0x80, 0xF5, 0x88, 0x9F
.byte 0x27, 0x32, 0xBD, 0xB1, 0x4E, 0x40, 0xD0, 0x0F, 0xA1, 0xBC, 0x7C, 0x23, 0x87, 0x8C, 0xD1, 0x1B
.byte 0x53, 0x3B, 0xA6, 0xD8, 0x4A, 0x09, 0x1A, 0x4A, 0x1B, 0x37, 0x7B, 0x9B, 0x2C, 0x03, 0x3A, 0x53
.byte 0x36, 0xF7, 0x05, 0x84, 0x38, 0xD5, 0x94, 0xD9, 0x92, 0x11, 0xFD, 0x19, 0x9D, 0xCE, 0x35, 0xF1
.byte 0x0A, 0xDC, 0xCA, 0x54, 0xE5, 0xE5, 0x9F, 0x01, 0x1C, 0x1B, 0x9C, 0x49, 0x1E, 0xD7, 0x9D, 0x55
.byte 0xCF, 0xA2, 0xD9, 0x07, 0x78, 0x6E, 0xE1, 0x0B, 0x7F, 0xDF, 0x25, 0x1C, 0xAD, 0x5A, 0x0E, 0xB7
.byte 0x37, 0xD8, 0x0C, 0x1C, 0xBD, 0xAB, 0x1E, 0xDA, 0xC6, 0xBA, 0x23, 0xE5, 0x92, 0xC0, 0x3A, 0x61
.byte 0x63, 0x14, 0x69, 0xDB, 0x82, 0x4B, 0xE6, 0x02, 0x2A, 0x0B, 0x1F, 0xD8, 0x66, 0x2D, 0x90, 0x9D
.byte 0x05, 0x9C, 0xBA, 0xC3, 0x48, 0xD8, 0x9D, 0x0E, 0x93, 0xC1, 0xF4, 0x25, 0x81, 0x2F, 0x87, 0xE5
.byte 0x44, 0xF1, 0xC0, 0xC7, 0x3D, 0xA7, 0xC9, 0x68, 0xB3, 0xE8, 0x40, 0x19, 0x15, 0xD0, 0xB7, 0x1B
.byte 0x6C, 0x71, 0xDE, 0xB4, 0x4A, 0x7C, 0xC3, 0xDD, 0x3D, 0xB8, 0x03, 0xBF, 0xE8, 0x8A, 0xA4, 0x2C
.byte 0x7C, 0x64, 0xF3, 0xB9, 0x0C, 0xBD, 0x21, 0xBF, 0xA5, 0x62, 0xD8, 0xBB, 0x32, 0x8F, 0xD6, 0x9F
.byte 0x01, 0xB5, 0x54, 0x4B, 0x31, 0x18, 0x29, 0x6E, 0xD1, 0x2C, 0x2D, 0xB9, 0xB7, 0xD1, 0xE6, 0x34
.byte 0x36, 0xDA, 0xED, 0x43, 0x97, 0x0F, 0x02, 0x3D, 0x72, 0xDB, 0xF8, 0xA5, 0x6B, 0xCF, 0x45, 0x6C
.byte 0x84, 0x99, 0xB8, 0xB5, 0xB2, 0xE2, 0x23, 0x84, 0x0E, 0x51, 0x3D, 0xC6, 0x23, 0x24, 0xFA, 0x5A
.byte 0xFE, 0xE8, 0x9D, 0x96, 0xF8, 0x9F, 0xD3, 0x6A, 0x7B, 0xCC, 0x0F, 0xE6, 0x9B, 0x54, 0x53, 0x1F
.byte 0xEE, 0x0C, 0xD5, 0xA1, 0xEE, 0xF9, 0x25, 0xFC, 0x4A, 0x63, 0xC3, 0x6E, 0x87, 0xBD, 0xC8, 0x86
.byte 0xA6, 0x65, 0x1C, 0x9E, 0x05, 0xF0, 0x08, 0x81, 0xBC, 0x18, 0x67, 0x58, 0x6D, 0xBB, 0x77, 0x5B
.byte 0xC7, 0x4D, 0xFD, 0xB6, 0x46, 0x22, 0xB2, 0x91, 0x85, 0x76, 0x00, 0x0D, 0x34, 0xC8, 0x93, 0xDA
.byte 0x2E, 0xAF, 0x78, 0x34, 0x9F, 0x81, 0xB5, 0x5C, 0x9A, 0x1D, 0xB4, 0x07, 0xD9, 0x2C, 0x63, 0xA0
.byte 0x79, 0x61, 0x56, 0xC0, 0x83, 0x09, 0x51, 0x09, 0x80, 0x52, 0x17, 0xB4, 0x1A, 0xAA, 0x8E, 0x49
.byte 0x5A, 0x07, 0x7D, 0xFA, 0x89, 0x33, 0x56, 0x24, 0x50, 0x0A, 0x2C, 0x29, 0x36, 0x90, 0xCA, 0xB0
.byte 0xF1, 0x21, 0x70, 0x74, 0x2B, 0xC2, 0x7E, 0xAB, 0x14, 0x95, 0x60, 0x2F, 0x40, 0xEF, 0x78, 0x9A
.byte 0xF7, 0xF6, 0x95, 0x81, 0x29, 0xEB, 0xA5, 0x79, 0xF6, 0xD1, 0xA3, 0x2D, 0x61, 0x6E, 0xDD, 0x52
.byte 0x90, 0x4E, 0xC7, 0xBB, 0x11, 0x46, 0x67, 0x25, 0xDC, 0xC8, 0x55, 0x1C, 0xB7, 0xCD, 0xB7, 0xAE
.byte 0xC4, 0x4C, 0x2F, 0xED, 0x38, 0xD5, 0x67, 0x2E, 0xA6, 0x0A, 0x5B, 0x08, 0x79, 0x38, 0x5B, 0x09
.byte 0x87, 0x23, 0xC4, 0x98, 0x69, 0x2C, 0xBE, 0x46, 0xF4, 0x13, 0x63, 0xAC, 0xE1, 0x1A, 0x5B, 0xA5
.byte 0x67, 0x8A, 0x93, 0x9F, 0x60, 0xFA, 0xCD, 0x07, 0x04, 0x29, 0x0F, 0x7D, 0x62, 0x6B, 0x87, 0xE9
.byte 0x8E, 0x4C, 0x82, 0xF8, 0x78, 0x40, 0x3F, 0x6D, 0x54, 0xA2, 0x19, 0x36, 0xBC, 0x74, 0xDC, 0x24
.byte 0xFF, 0x6F, 0xC3, 0x5F, 0x69, 0x91, 0x66, 0x6E, 0xBB, 0x76, 0xEC, 0x1D, 0xE1, 0x73, 0x07, 0x70
.byte 0xBF, 0x89, 0x69, 0x38, 0xCA, 0xA8, 0xA5, 0x1E, 0x4A, 0xBF, 0x55, 0x07, 0x34, 0x31, 0x2B, 0x34
.byte 0xA0, 0xEF, 0x93, 0x0A, 0x81, 0xFA, 0x79, 0x3C, 0x71, 0x65, 0x5A, 0x52, 0xD9, 0x61, 0xC3, 0x99
.byte 0xEB, 0x2C, 0xD1, 0xB5, 0xD5, 0x77, 0xD4, 0x20, 0x37, 0x29, 0x27, 0x6B, 0x5A, 0x53, 0x9F, 0xFB
.byte 0x43, 0x33, 0x06, 0xC4, 0x2D, 0x7F, 0x01, 0x9F, 0xE4, 0x5C, 0xF1, 0xBE, 0xBD, 0xB5, 0x57, 0xA9
.byte 0xE2, 0x29, 0x5E, 0xB7, 0xA1, 0x32, 0xD7, 0xD8, 0x5C, 0xFF, 0x43, 0xB6, 0x53, 0xE3, 0xB2, 0x96
/*
* Additional interrupt test. The objective is to check that interrupt
* arrival at any time will not disrupt program flow.
*
* The main part of the program calculates CRC32 of a 16 kbyte block
* of data. The other part generates interrupts at random times using
* the C99 pseudorandom generator and the timer peripheral.
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lcs r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
// Set up the interrupt handler
lcs r200, 0 // initialize counter
lc r201, 0x10000008 // output pointer
lc r202, 1103515245 // PRNG: multiplicative constant
lcs r203, 12345 // PRNG: additive constant
lcs r204, 32767 // PRNG: modulo
lcs r205, 1 // PRNG: current seed value
lcs iv0, timer_handler
mov cr, 1 // enable interrupt 0
sw r104, 100
sw r103, 1 // activate timer, one pulse
// Main routine
lc r16, 0x10000004 // output pointer
lcs r17, 0xFFFFFFFF // initial CRC value
lc r18, 0xEDB88320 // polynom
lcs r19, data // input pointer
lcs r20, 4096 // data block size in words
lcs r32, word_loop
lcs r33, bit_loop
lcs r34, dont_xor
mov r64, 0 // word counter
word_loop:
lw r0, r19
mov r65, 0 // bit counter
bit_loop:
and r1, r0, 1
and r2, r17, 1
sru r17, r17, 1
xor r3, r1, r2
cjmpe r34, r3, 0 // dont_xor
xor r17, r17, r18
dont_xor:
sru r0, r0, 1
add r65, r65, 1
cjmpul r33, r65, 32 // bit_loop
sw r16, r64
add r19, r19, 4
add r64, r64, 1
cjmpul r32, r64, r20 // word_loop
not r17, r17
sw r16, r17
// Check main routine result
lc r0, 0xF958DFE2
cjmpne r102, r0, r17
mov cr, 0 // disable interrupts
sw r103, 0 // deactivate timer
sw r100, 1
jmp r101
failure:
sw r100, 2
halt:
hlt
jmp r101
 
timer_handler:
// PRNG generator from C99 (ISO/IEC 9899:1999)
mul r205, r205, r202
add r205, r205, r203
sru r220, r205, 16
and r220, r220, r204 // r220 now contains the C99 pseudorandom number
and r221, r220, 0x1F
add r221, r221, 32 // r221 is now a pseudorandom number from the [32, 63] range
sw r104, r221 // set up the timer delay
sw r103, 1 // single shot
iret
.align
data:
.byte 0xD7, 0x64, 0xC8, 0xCC, 0xE9, 0x32, 0x55, 0xC4, 0x47, 0x8D, 0x7A, 0xA0, 0x5D, 0x83, 0xF3, 0xEA
.byte 0xA2, 0xB7, 0x24, 0x9B, 0x04, 0x3E, 0x23, 0xCD, 0x28, 0x66, 0x21, 0x1B, 0xFF, 0x37, 0x83, 0xD6
.byte 0x9C, 0x4B, 0xA3, 0x86, 0x7E, 0xF9, 0x4A, 0xC5, 0x86, 0xC5, 0x66, 0xE4, 0x48, 0x5A, 0xCE, 0xEB
.byte 0x11, 0xF3, 0x86, 0x16, 0x31, 0xA9, 0xE3, 0x59, 0x10, 0x05, 0x75, 0x10, 0x3C, 0xF8, 0xE6, 0xD9
.byte 0x44, 0x8A, 0x60, 0xC2, 0x83, 0xAA, 0x88, 0x0A, 0x70, 0xEE, 0xEE, 0xB8, 0x48, 0xBD, 0xA3, 0x5A
.byte 0xB0, 0x2A, 0x70, 0xE1, 0xD4, 0x54, 0x3A, 0xE4, 0x59, 0xAF, 0xF4, 0x96, 0xA8, 0xDB, 0x70, 0xEC
.byte 0x65, 0xD0, 0xAF, 0xE9, 0x7B, 0x37, 0xF3, 0xEB, 0x25, 0xE1, 0xA4, 0x6E, 0x9E, 0x47, 0xC9, 0x4E
.byte 0x72, 0x39, 0x30, 0x46, 0x8E, 0x6A, 0x2B, 0xE8, 0x1A, 0x20, 0x7E, 0xC2, 0xFC, 0xEF, 0xAF, 0x62
.byte 0xBF, 0x5E, 0x4B, 0x3B, 0x95, 0x3E, 0x27, 0xBB, 0x20, 0xCB, 0x2A, 0xBE, 0x13, 0xF3, 0x0D, 0x85
.byte 0x2D, 0x3D, 0xCC, 0xBB, 0xA8, 0xF7, 0xA3, 0xC2, 0x17, 0x22, 0x85, 0x14, 0x11, 0x34, 0x76, 0xD1
.byte 0x92, 0xC1, 0x0D, 0x28, 0xFF, 0x34, 0xE3, 0x20, 0xFF, 0x0D, 0xDE, 0x12, 0x01, 0xEC, 0x98, 0x2E
.byte 0x29, 0x64, 0xE9, 0xD1, 0x5B, 0x8D, 0x94, 0x73, 0xAF, 0x19, 0x87, 0xC1, 0x4D, 0xFE, 0x93, 0xE0
.byte 0xBF, 0xA1, 0x09, 0xBF, 0xD5, 0xEC, 0xDF, 0xD4, 0xFA, 0xBE, 0xE7, 0xFB, 0xAA, 0x7F, 0x29, 0xD4
.byte 0xE3, 0x13, 0xA6, 0x3F, 0xA1, 0x3A, 0xB3, 0x51, 0x54, 0x3B, 0x12, 0xA2, 0x39, 0xA6, 0x82, 0xF8
.byte 0x47, 0x8B, 0xB8, 0x1C, 0x78, 0x97, 0xF1, 0x73, 0x56, 0xD9, 0x6F, 0x00, 0x58, 0x99, 0xD5, 0x3B
.byte 0xAC, 0x7B, 0x7B, 0x4E, 0xB6, 0x2E, 0x9F, 0x0A, 0x69, 0xB2, 0xAC, 0xA3, 0x58, 0x2F, 0x9B, 0xA0
.byte 0xBB, 0x54, 0xBD, 0x33, 0xEB, 0xAF, 0xA7, 0x41, 0x88, 0x16, 0x42, 0xE0, 0xAF, 0x17, 0x1C, 0x5C
.byte 0x93, 0x97, 0xAA, 0x49, 0xC6, 0x49, 0x54, 0x30, 0xFB, 0x00, 0xD3, 0x54, 0x30, 0x6F, 0xF5, 0xEB
.byte 0xC3, 0xB2, 0x1F, 0xAF, 0x62, 0xC6, 0xF1, 0xEA, 0xDC, 0x34, 0xCB, 0x8C, 0x4C, 0xE7, 0xE8, 0xDF
.byte 0x7F, 0x93, 0x29, 0x46, 0xDD, 0x7E, 0x76, 0xD9, 0x7E, 0x4A, 0x2E, 0xAF, 0xBA, 0x23, 0x9A, 0x7E
.byte 0xD6, 0xB9, 0x2D, 0x38, 0x7F, 0x1F, 0x23, 0x5C, 0x53, 0xEE, 0xE8, 0x9F, 0xD6, 0xD1, 0x7E, 0x55
.byte 0x64, 0xA8, 0x9B, 0x42, 0x26, 0x12, 0x1B, 0xA5, 0x5D, 0x49, 0x54, 0x17, 0x6D, 0xEF, 0x95, 0x43
.byte 0xA8, 0xC3, 0x7C, 0x28, 0xE2, 0xA0, 0x84, 0x35, 0x8E, 0x6D, 0xD4, 0x64, 0x3E, 0x53, 0xBA, 0xA3
.byte 0xFC, 0x56, 0xE5, 0x22, 0x69, 0x01, 0xC8, 0xC6, 0x4B, 0x1D, 0xDD, 0xB8, 0x0C, 0x72, 0xFC, 0xB5
.byte 0x35, 0x79, 0xDD, 0x18, 0x19, 0x62, 0x4D, 0xA8, 0xCF, 0x21, 0x0D, 0x0D, 0x75, 0xC7, 0xB1, 0x71
.byte 0x1E, 0x96, 0x94, 0x87, 0x98, 0x5C, 0x4D, 0xE3, 0x7A, 0x2B, 0x9C, 0x86, 0x9E, 0x98, 0x3B, 0xD4
.byte 0x11, 0x19, 0xEC, 0x2B, 0x7B, 0x39, 0xD3, 0x4A, 0x5B, 0xE0, 0x58, 0xD0, 0xA8, 0x09, 0x41, 0xC7
.byte 0xA0, 0xD6, 0x4E, 0x38, 0x32, 0x9C, 0x1C, 0xAC, 0xC8, 0xB8, 0x33, 0x66, 0x50, 0x6F, 0x3B, 0x62
.byte 0x88, 0x27, 0x8E, 0x03, 0x61, 0x61, 0x4E, 0xBC, 0x42, 0xA6, 0x8D, 0xEB, 0xAF, 0xCF, 0xB2, 0x4F
.byte 0xA5, 0x01, 0x88, 0xD8, 0x9E, 0xA4, 0x84, 0x66, 0x5C, 0xB8, 0xCD, 0xAD, 0x27, 0x08, 0x10, 0xAF
.byte 0x30, 0x9E, 0xB3, 0x91, 0x00, 0x01, 0x4E, 0x42, 0xA7, 0xDB, 0x2E, 0x57, 0xAA, 0xE1, 0xA7, 0x50
.byte 0xE2, 0x2F, 0x28, 0x80, 0xD4, 0xAC, 0xE7, 0x30, 0x64, 0xB4, 0xDE, 0x8C, 0xBD, 0xEE, 0x3B, 0xED
.byte 0x8D, 0xEE, 0x7E, 0x8D, 0xF0, 0xCC, 0xD0, 0x98, 0xA8, 0xFE, 0xEF, 0x53, 0xDF, 0x96, 0xA3, 0xC2
.byte 0xC6, 0xCB, 0x43, 0x9A, 0x78, 0x2A, 0xCB, 0xDD, 0xDF, 0xAA, 0x69, 0x9C, 0x98, 0xA5, 0x89, 0x25
.byte 0x94, 0x08, 0xB3, 0x84, 0xD5, 0x83, 0x1C, 0x7D, 0x82, 0x0C, 0xD0, 0x62, 0xA3, 0x73, 0x24, 0x69
.byte 0x3F, 0x68, 0x04, 0xB7, 0x92, 0xD0, 0x95, 0x72, 0x7A, 0xFE, 0x0F, 0x13, 0xA4, 0x98, 0x38, 0x38
.byte 0xA1, 0xEC, 0xBC, 0x76, 0x70, 0xD9, 0xF3, 0xF2, 0xE6, 0xC4, 0x55, 0x89, 0x38, 0x7A, 0xF3, 0x77
.byte 0xE2, 0xF7, 0x2F, 0x75, 0xC7, 0xC4, 0xE7, 0x41, 0xC2, 0xF6, 0x54, 0x67, 0x8F, 0x8D, 0x9F, 0x30
.byte 0x7A, 0x5C, 0xA7, 0xEA, 0x35, 0x9B, 0xDD, 0x1C, 0x5F, 0x32, 0xA5, 0x97, 0xAD, 0x98, 0x0F, 0x8F
.byte 0x90, 0x3E, 0x04, 0x58, 0x02, 0xEC, 0x99, 0xC5, 0xE3, 0xEE, 0x2C, 0x72, 0x7C, 0xCB, 0xA3, 0xF7
.byte 0x27, 0x4A, 0xE1, 0x5D, 0xE6, 0xBF, 0x79, 0x45, 0xF2, 0x1F, 0xDD, 0x9F, 0xB7, 0xEC, 0x2F, 0x48
.byte 0x2A, 0x33, 0xA0, 0x2D, 0x20, 0x3A, 0xF2, 0x03, 0x29, 0x1E, 0x76, 0xA6, 0xEA, 0x19, 0x9D, 0x12
.byte 0x64, 0x7F, 0x6F, 0x4B, 0x3E, 0xE9, 0x90, 0x30, 0x08, 0x6E, 0xD0, 0xC0, 0x5B, 0xFF, 0x09, 0x86
.byte 0x33, 0xA9, 0xB3, 0x53, 0xE3, 0xA5, 0x57, 0x0C, 0xC4, 0xCD, 0xB2, 0xAE, 0xE7, 0x50, 0xC0, 0x4C
.byte 0xCF, 0x30, 0x97, 0x0D, 0x19, 0x28, 0x3E, 0x22, 0x96, 0x0E, 0xE3, 0xF2, 0x0E, 0xEC, 0x78, 0x41
.byte 0x96, 0x2B, 0x95, 0x79, 0xD0, 0xED, 0x86, 0x95, 0xBA, 0x39, 0x43, 0xA2, 0x89, 0x04, 0xEE, 0x58
.byte 0x34, 0x85, 0x66, 0x4E, 0xAE, 0xA5, 0x71, 0x44, 0xB4, 0x55, 0x36, 0xC2, 0x42, 0xAE, 0x04, 0xD8
.byte 0xDA, 0x99, 0x52, 0xAA, 0x86, 0xD9, 0x40, 0x41, 0x12, 0x83, 0xE3, 0x9C, 0x87, 0xD2, 0xF5, 0xBC
.byte 0x58, 0x5C, 0x0B, 0x06, 0x01, 0x7C, 0x4A, 0xB5, 0xD1, 0x81, 0x77, 0x14, 0x30, 0x7B, 0xEC, 0x0B
.byte 0x15, 0x3E, 0xB6, 0x9C, 0x17, 0xF6, 0xDE, 0x2A, 0x79, 0xC1, 0xC7, 0x01, 0x94, 0xBC, 0xBE, 0xEC
.byte 0x18, 0xC9, 0xF2, 0x19, 0x46, 0x3D, 0xCF, 0x18, 0xBF, 0x46, 0x2C, 0xF0, 0xC2, 0x18, 0xFB, 0xD8
.byte 0x57, 0xB1, 0x74, 0x6F, 0xA7, 0x52, 0x99, 0x21, 0x14, 0x60, 0x23, 0xA8, 0x1D, 0xE1, 0x95, 0x35
.byte 0xAB, 0x87, 0x4F, 0xF1, 0xC4, 0x1F, 0x09, 0x83, 0x66, 0x36, 0x73, 0x29, 0x4E, 0x6F, 0x01, 0xA6
.byte 0x20, 0x76, 0x15, 0xC7, 0xC9, 0xAF, 0xE9, 0xDE, 0x10, 0x0C, 0x86, 0x2D, 0xED, 0x1C, 0x63, 0x98
.byte 0xA3, 0xB3, 0x8A, 0x68, 0xD2, 0x93, 0xEB, 0x38, 0xCA, 0x5F, 0x61, 0x18, 0xCE, 0x63, 0xBF, 0xEF
.byte 0xD9, 0xD4, 0xB6, 0xA2, 0x84, 0x9F, 0x80, 0x94, 0xAB, 0x07, 0xC1, 0x99, 0x23, 0x24, 0x32, 0xC7
.byte 0xD8, 0xBC, 0x2F, 0xAA, 0x50, 0x1B, 0xE3, 0x1A, 0x7A, 0x45, 0x33, 0x49, 0xA8, 0xF2, 0x38, 0x81
.byte 0xC7, 0xEF, 0x24, 0x4B, 0x8F, 0xA4, 0xDF, 0x3B, 0xAC, 0xA1, 0xD5, 0xD0, 0xC5, 0x07, 0x97, 0x9E
.byte 0xC3, 0xC6, 0x48, 0x13, 0xE1, 0x2C, 0x2D, 0x5C, 0x71, 0x60, 0xA5, 0x19, 0x53, 0xDE, 0x9B, 0x1A
.byte 0xCE, 0xBF, 0x66, 0x5D, 0x64, 0x45, 0x99, 0x11, 0xE6, 0x6E, 0xE1, 0xAC, 0x75, 0x78, 0x4A, 0x39
.byte 0x3E, 0x93, 0x4D, 0x20, 0xBF, 0x7A, 0x7C, 0x31, 0xDB, 0x22, 0x4B, 0x2F, 0x00, 0xE6, 0x49, 0xCF
.byte 0xA6, 0xB0, 0x2C, 0x0B, 0xF5, 0xC6, 0x1C, 0xDC, 0x35, 0xFE, 0x89, 0xAA, 0x77, 0xD4, 0xE4, 0xB6
.byte 0x67, 0x31, 0xD6, 0x27, 0xAC, 0x52, 0x58, 0x88, 0x75, 0xA3, 0xB7, 0x75, 0x8A, 0x01, 0x44, 0x31
.byte 0xB1, 0x71, 0x3C, 0xA7, 0x38, 0x59, 0x83, 0x6D, 0x57, 0x0C, 0x18, 0xCF, 0xE1, 0xFC, 0x85, 0x48
.byte 0x2E, 0x5B, 0x70, 0xDA, 0xAE, 0xC9, 0x62, 0x23, 0x6D, 0x1A, 0x99, 0xF7, 0x1B, 0xDE, 0x28, 0xCD
.byte 0x50, 0x65, 0x74, 0x88, 0xBE, 0xF8, 0xF5, 0x16, 0x05, 0x0D, 0xE5, 0xE6, 0x0A, 0x6B, 0x2F, 0x38
.byte 0xC7, 0x9F, 0x12, 0x76, 0x68, 0x75, 0x9A, 0xD5, 0x90, 0x33, 0xCD, 0xAC, 0x12, 0xF6, 0x79, 0x62
.byte 0x5B, 0xEE, 0xEA, 0x1A, 0xE6, 0xE0, 0x31, 0xEB, 0xED, 0x16, 0xD2, 0xF7, 0x82, 0x01, 0x30, 0x49
.byte 0xA0, 0x43, 0xBF, 0x09, 0xB8, 0x59, 0xDF, 0x48, 0x8D, 0xAC, 0xF5, 0x9F, 0xA3, 0x6E, 0x02, 0xFE
.byte 0x5D, 0xEC, 0x19, 0x43, 0xCD, 0x4A, 0x2F, 0xBA, 0x61, 0x01, 0xB2, 0xE3, 0x02, 0xE2, 0x2D, 0xA3
.byte 0x25, 0xEC, 0xAC, 0xDE, 0x46, 0x8C, 0x27, 0xD4, 0x39, 0x1C, 0x73, 0xDC, 0x8B, 0x76, 0xDB, 0xE8
.byte 0x62, 0xF4, 0x2C, 0x30, 0x3F, 0x5C, 0xEA, 0xA0, 0x5D, 0x9D, 0x84, 0x60, 0x80, 0xB1, 0x04, 0xA6
.byte 0x9E, 0xB1, 0x85, 0xE5, 0x3D, 0xAC, 0xB9, 0x76, 0xC9, 0x2D, 0x53, 0x55, 0xA3, 0x2E, 0x3E, 0x06
.byte 0x23, 0x6A, 0x36, 0x62, 0xC7, 0x21, 0x03, 0x25, 0xBE, 0x87, 0x86, 0x3F, 0x39, 0x8A, 0xE5, 0xD8
.byte 0x3C, 0x6A, 0xBD, 0x7A, 0x17, 0x76, 0xF0, 0xE1, 0xA3, 0x44, 0x36, 0x47, 0x72, 0x75, 0x4D, 0x96
.byte 0xE0, 0x83, 0xF8, 0xA7, 0xA4, 0xFC, 0xCC, 0x63, 0x83, 0x52, 0xA2, 0xBD, 0xDD, 0x88, 0x95, 0x19
.byte 0xF3, 0x52, 0x93, 0x0B, 0xC9, 0x84, 0xEC, 0x6D, 0xC8, 0x23, 0xB4, 0x3B, 0x98, 0x02, 0xD1, 0x79
.byte 0x85, 0xCA, 0x20, 0x2A, 0xC6, 0xEC, 0x8E, 0x4A, 0x3F, 0x31, 0x08, 0x1C, 0xBA, 0x9D, 0x36, 0xAD
.byte 0xF0, 0xC9, 0xB8, 0xBA, 0x4E, 0xA5, 0x27, 0x17, 0xC8, 0xDC, 0x52, 0x61, 0xDE, 0x24, 0xDA, 0x63
.byte 0xEE, 0xFB, 0x8E, 0xB5, 0xE8, 0x1D, 0x00, 0x27, 0x4E, 0x08, 0x44, 0x08, 0xA5, 0x7A, 0xB6, 0x96
.byte 0x44, 0x6F, 0x50, 0x92, 0x14, 0x77, 0xA9, 0xDD, 0x53, 0xFC, 0x3F, 0x31, 0x20, 0x19, 0x95, 0x0F
.byte 0x15, 0x24, 0xC4, 0xFD, 0x41, 0xC4, 0x24, 0x90, 0xCC, 0x69, 0x99, 0x72, 0xE3, 0x4F, 0x09, 0x28
.byte 0xBF, 0x59, 0xBB, 0xD3, 0xD1, 0x64, 0xB1, 0x25, 0x61, 0xF0, 0x57, 0x81, 0x0A, 0xEC, 0x91, 0x1F
.byte 0x11, 0x56, 0x1C, 0x52, 0x1B, 0x41, 0xE3, 0xE8, 0xAB, 0x7C, 0x5A, 0x8F, 0xCC, 0x64, 0xB7, 0x8C
.byte 0xBD, 0x72, 0x5F, 0x8E, 0xD7, 0x11, 0xB4, 0x38, 0x01, 0x0B, 0xBA, 0x0B, 0xF8, 0x4B, 0x2B, 0x09
.byte 0xA2, 0x48, 0x5C, 0xBD, 0x89, 0x3F, 0xA5, 0x34, 0xBC, 0x00, 0xC3, 0x89, 0x64, 0x7B, 0x15, 0x22
.byte 0xED, 0x75, 0xB1, 0xC4, 0x86, 0x65, 0xFD, 0x88, 0x70, 0xB7, 0x94, 0x68, 0x03, 0xBF, 0x71, 0xA5
.byte 0x07, 0xCE, 0x63, 0x91, 0x0E, 0x08, 0xC6, 0xCA, 0x09, 0x8A, 0x54, 0x6D, 0x05, 0x69, 0x90, 0xF2
.byte 0xDF, 0x41, 0xB7, 0x66, 0xA6, 0xB4, 0xEE, 0x16, 0x6C, 0x83, 0x7F, 0x70, 0x43, 0xF1, 0x16, 0x4A
.byte 0xBF, 0x79, 0xDC, 0xCD, 0x82, 0xA2, 0x98, 0x8B, 0x2C, 0xED, 0xF9, 0x32, 0x57, 0x89, 0x24, 0x36
.byte 0xCA, 0xDC, 0x9C, 0x71, 0x91, 0x8B, 0x88, 0xFE, 0x0F, 0x07, 0x6E, 0x52, 0xF9, 0x84, 0x9C, 0xB8
.byte 0xFE, 0x79, 0x86, 0x80, 0x1B, 0x1F, 0x0B, 0x48, 0x0C, 0x05, 0x7A, 0x63, 0x8E, 0x9F, 0x9A, 0x59
.byte 0x7C, 0x37, 0xCB, 0x0D, 0xC3, 0x53, 0x0C, 0xD2, 0x5B, 0x7A, 0x24, 0x54, 0xFF, 0xC1, 0x0D, 0xFE
.byte 0x3A, 0x94, 0x7E, 0x56, 0xB3, 0x8A, 0x9F, 0xC0, 0x8F, 0x1A, 0x24, 0x1E, 0xB9, 0xBF, 0x78, 0x36
.byte 0xF6, 0x43, 0x44, 0xB9, 0x97, 0x50, 0x8C, 0xF2, 0xCB, 0xB0, 0x46, 0xCB, 0x72, 0x53, 0xC9, 0xAD
.byte 0xE8, 0x47, 0x04, 0x9B, 0xD1, 0xA3, 0x5C, 0x61, 0xBD, 0x81, 0x80, 0x77, 0x40, 0xF8, 0xAD, 0x37
.byte 0x3C, 0xF1, 0xF0, 0xD3, 0x42, 0x7D, 0xC5, 0x0D, 0x2D, 0x0C, 0xD8, 0xA0, 0x60, 0xA1, 0x4D, 0x48
.byte 0xE8, 0x51, 0xE4, 0xBA, 0xF4, 0x41, 0x1B, 0xB2, 0xC2, 0x9B, 0x2A, 0x03, 0x94, 0xD8, 0x3A, 0xD0
.byte 0xC9, 0x2A, 0xA4, 0x0B, 0xA7, 0x69, 0x19, 0xD5, 0x76, 0xF1, 0x75, 0xD6, 0x92, 0xC3, 0x1F, 0x7B
.byte 0x14, 0x03, 0x36, 0x09, 0x44, 0x52, 0xBC, 0x07, 0xEE, 0xE6, 0x0A, 0x82, 0xBE, 0x44, 0x53, 0x88
.byte 0x6F, 0xF7, 0x94, 0x17, 0x61, 0xAD, 0xED, 0xD8, 0x9F, 0x63, 0xAF, 0x32, 0x26, 0xCE, 0xAE, 0x3B
.byte 0xD2, 0xE4, 0x44, 0x17, 0x36, 0x00, 0x1E, 0x25, 0xE7, 0x28, 0xA8, 0xA5, 0x6D, 0xFB, 0x2E, 0xDC
.byte 0xF3, 0xC2, 0xF4, 0x55, 0x70, 0xE1, 0x2D, 0x0F, 0x44, 0xDC, 0x41, 0x6A, 0xAB, 0xEF, 0xA5, 0x7D
.byte 0xD4, 0xEA, 0x94, 0x0B, 0xEB, 0xB3, 0x30, 0xD2, 0xDC, 0xD9, 0x78, 0x49, 0xD5, 0xA6, 0x26, 0xC8
.byte 0x68, 0x1A, 0x1E, 0xD9, 0xFC, 0x4B, 0xE8, 0x40, 0x28, 0x2A, 0xAB, 0xD3, 0x19, 0x51, 0x51, 0xEE
.byte 0x3C, 0xE5, 0xF9, 0x27, 0x98, 0x2A, 0xFA, 0x74, 0x03, 0x72, 0xBE, 0xD8, 0x18, 0xE4, 0xA1, 0x81
.byte 0xFF, 0xBF, 0x5B, 0xFB, 0x0B, 0x43, 0x3C, 0x34, 0x6D, 0xE7, 0x07, 0x87, 0x39, 0x58, 0x75, 0x75
.byte 0x3E, 0x6F, 0x9C, 0xD7, 0x9A, 0x96, 0x4B, 0x9D, 0x08, 0x09, 0x76, 0x21, 0xEE, 0x17, 0xA3, 0xED
.byte 0xD7, 0xFE, 0xE8, 0xE2, 0x42, 0x24, 0x16, 0xB0, 0x0C, 0x1E, 0x37, 0x45, 0x77, 0xAD, 0xBA, 0xB6
.byte 0x1D, 0x56, 0x8D, 0xB7, 0xED, 0xD8, 0x55, 0xF6, 0xE2, 0xCB, 0x18, 0xD0, 0xE3, 0xBC, 0xBE, 0xBA
.byte 0xBB, 0xA7, 0x9D, 0xFD, 0xCB, 0xB4, 0xAD, 0xD8, 0xD2, 0xE5, 0x1D, 0x4A, 0x92, 0xD8, 0x00, 0xAF
.byte 0x2F, 0x8D, 0x67, 0x1C, 0x66, 0xBC, 0x13, 0x48, 0x87, 0x2B, 0x19, 0x6A, 0xE7, 0xD7, 0x24, 0xA3
.byte 0x7E, 0xC2, 0xA0, 0x4A, 0x76, 0x4E, 0x23, 0x49, 0x33, 0x41, 0x93, 0xC5, 0x19, 0x94, 0x75, 0x49
.byte 0x22, 0xDD, 0x66, 0x88, 0x99, 0x79, 0xD1, 0x21, 0xA5, 0xEB, 0x8B, 0x8D, 0xC3, 0xB0, 0x30, 0x42
.byte 0x72, 0xD0, 0x8C, 0xE9, 0x1E, 0xB0, 0x32, 0x52, 0xF1, 0xC5, 0x18, 0x0B, 0x5A, 0x8D, 0x54, 0x7C
.byte 0x6A, 0xBA, 0x04, 0x04, 0x34, 0xD6, 0x25, 0xD9, 0xC1, 0xB1, 0x66, 0x84, 0x62, 0x97, 0xC6, 0xD5
.byte 0x67, 0x53, 0xBE, 0x86, 0x03, 0xF0, 0xD8, 0xF5, 0xB6, 0xF0, 0x00, 0x10, 0x7E, 0x55, 0x8C, 0xE9
.byte 0x10, 0x91, 0xEE, 0x44, 0x67, 0x13, 0x1E, 0x29, 0xC5, 0x84, 0xAE, 0x27, 0x1B, 0x74, 0xFD, 0x83
.byte 0xC8, 0xBB, 0x0A, 0xCC, 0xAC, 0xE3, 0xC1, 0x62, 0xD4, 0xC2, 0x72, 0x53, 0x18, 0xFF, 0x3D, 0x28
.byte 0x90, 0x2B, 0x6D, 0xF8, 0x3F, 0x8B, 0x21, 0x04, 0x0F, 0xCF, 0x2C, 0x2B, 0x44, 0x29, 0xAF, 0x0D
.byte 0xE5, 0xB9, 0xD9, 0x91, 0x9D, 0x9B, 0xF3, 0x71, 0x5E, 0x66, 0xC5, 0x76, 0x65, 0x02, 0x9F, 0xF6
.byte 0x2D, 0x0C, 0xEF, 0x6D, 0x97, 0x11, 0x72, 0xA7, 0xE1, 0x9E, 0xD2, 0x25, 0xC8, 0x81, 0x33, 0xAD
.byte 0x3B, 0x0C, 0x3E, 0xD9, 0xA8, 0x32, 0x4B, 0x06, 0x98, 0x10, 0x7D, 0xFE, 0x12, 0x1C, 0xF5, 0x40
.byte 0x28, 0xE4, 0xAE, 0xBF, 0xF6, 0x20, 0x66, 0xD7, 0xBE, 0x39, 0xFD, 0x87, 0xBB, 0x30, 0x34, 0xF7
.byte 0x3C, 0x73, 0xD0, 0xE5, 0xA5, 0x1B, 0xEB, 0x3D, 0x2C, 0x68, 0x3C, 0x3F, 0x85, 0x31, 0x80, 0xAD
.byte 0x16, 0x2E, 0x6D, 0x0C, 0x4E, 0xD3, 0xE3, 0x0D, 0x0D, 0xE0, 0x94, 0xC8, 0x10, 0xC9, 0xBF, 0x4D
.byte 0x3C, 0x90, 0x32, 0xE2, 0xAC, 0x1E, 0x1F, 0xD8, 0x87, 0x5B, 0x18, 0x0C, 0x8D, 0x98, 0xB9, 0xA3
.byte 0xC6, 0x27, 0xAF, 0x15, 0xFA, 0x92, 0x22, 0x08, 0x73, 0xB7, 0xD0, 0x84, 0x81, 0x90, 0xD1, 0xBE
.byte 0x21, 0x04, 0xA0, 0xCD, 0x23, 0xC0, 0xA6, 0xAA, 0x1B, 0xBE, 0xB7, 0xA9, 0x56, 0x71, 0x4C, 0x1D
.byte 0x98, 0xFB, 0x32, 0x93, 0x8E, 0x55, 0x9B, 0x01, 0x0C, 0x6C, 0x85, 0x8E, 0xFD, 0x57, 0x4C, 0x1E
.byte 0x5C, 0xEC, 0xEC, 0x7F, 0xAC, 0x92, 0x2A, 0xC8, 0x51, 0xE2, 0x71, 0xA7, 0x53, 0xBE, 0xC5, 0xEB
.byte 0xBA, 0xF7, 0x7E, 0x48, 0x4C, 0x1A, 0x49, 0x59, 0x86, 0xCF, 0xE7, 0x83, 0x27, 0x33, 0xA2, 0x83
.byte 0x20, 0x8E, 0x03, 0xCC, 0x21, 0x2D, 0x95, 0x72, 0x0F, 0x07, 0x1A, 0x63, 0xC5, 0xDF, 0x4E, 0x7F
.byte 0xD7, 0xCD, 0xC7, 0x24, 0xE7, 0x11, 0x7D, 0x6E, 0xE1, 0x65, 0xF2, 0x08, 0x99, 0x94, 0x8B, 0xB9
.byte 0x23, 0x8E, 0x86, 0x44, 0xBC, 0x1C, 0xB6, 0xCC, 0x23, 0xD1, 0x2F, 0xE9, 0xB0, 0x7E, 0x68, 0x87
.byte 0x4C, 0x30, 0xAB, 0x33, 0x42, 0x29, 0xA2, 0x23, 0x8E, 0x94, 0x2C, 0x28, 0x29, 0xB8, 0xE1, 0x4C
.byte 0x47, 0x68, 0x91, 0x03, 0x84, 0x47, 0xD0, 0xA8, 0x18, 0x00, 0x91, 0xC9, 0x7F, 0xF9, 0x51, 0xCB
.byte 0x2A, 0xFC, 0xFE, 0x6C, 0x26, 0xA1, 0x90, 0xB4, 0x35, 0xBC, 0xDC, 0x5E, 0x74, 0xBE, 0xAB, 0xBC
.byte 0x26, 0x3C, 0xC0, 0xAB, 0x84, 0x90, 0x53, 0x9D, 0x91, 0xE4, 0x66, 0x10, 0xDE, 0xB8, 0xDB, 0x08
.byte 0xB4, 0xDA, 0x75, 0xDA, 0x7B, 0x05, 0x8F, 0xB1, 0xC2, 0x6C, 0x10, 0x37, 0x2B, 0xBB, 0xF3, 0x52
.byte 0xF8, 0xB3, 0xFD, 0x7C, 0x43, 0x51, 0x19, 0xD5, 0x35, 0x80, 0xE5, 0x14, 0x38, 0xC0, 0x1C, 0xED
.byte 0x9B, 0x91, 0xC8, 0x16, 0x97, 0x58, 0xC7, 0x59, 0xC5, 0xD7, 0x90, 0xF0, 0x93, 0x83, 0x42, 0x8B
.byte 0x36, 0x40, 0x08, 0x7A, 0x91, 0x22, 0x4F, 0xC7, 0xA3, 0x34, 0xDC, 0xDB, 0xF5, 0xF8, 0xC9, 0x90
.byte 0x8A, 0x92, 0xA7, 0x21, 0xEA, 0x6E, 0x7B, 0xB0, 0x46, 0x0B, 0xA0, 0xDA, 0x8E, 0xE3, 0x65, 0xC5
.byte 0x24, 0x6E, 0x3F, 0xB5, 0x90, 0x8F, 0x7D, 0x33, 0xC3, 0x59, 0x0F, 0xB9, 0x52, 0xD8, 0x49, 0xDD
.byte 0x6B, 0xF0, 0xFF, 0x56, 0x5F, 0x7A, 0x06, 0xA6, 0x85, 0xA7, 0x80, 0x14, 0x8A, 0xE6, 0xDA, 0xAE
.byte 0x54, 0x19, 0x64, 0xE4, 0xA9, 0xE2, 0x18, 0x6C, 0x3C, 0x27, 0x26, 0x8F, 0x00, 0x70, 0x6C, 0x6B
.byte 0x61, 0x6B, 0xC1, 0xC0, 0xE5, 0xC7, 0x67, 0x6B, 0x6F, 0xE8, 0x80, 0xF9, 0xCE, 0x5A, 0xA8, 0x23
.byte 0x73, 0x0D, 0x08, 0x1C, 0xF0, 0x20, 0x89, 0x2C, 0x47, 0xB0, 0xBC, 0x47, 0x20, 0x28, 0xB3, 0x81
.byte 0x94, 0x74, 0x41, 0x79, 0x3C, 0xA9, 0xE5, 0xAB, 0x91, 0x65, 0xA5, 0x60, 0xBF, 0x4E, 0x84, 0x33
.byte 0x5B, 0x8C, 0x50, 0x4C, 0xAC, 0xDA, 0x79, 0xF4, 0x8A, 0x35, 0x3C, 0xAA, 0x5D, 0xEF, 0x2B, 0xF2
.byte 0x64, 0x6D, 0x6C, 0xA0, 0x17, 0x51, 0x4C, 0xA8, 0xB6, 0xF1, 0x09, 0x76, 0x3F, 0x8D, 0xA9, 0x9B
.byte 0x1A, 0xFA, 0xE7, 0xC7, 0xD4, 0x60, 0xBB, 0x5E, 0x96, 0xF8, 0x09, 0xF4, 0xE7, 0x34, 0xE6, 0x4C
.byte 0xA2, 0x52, 0xED, 0xB9, 0xA3, 0x39, 0x62, 0x5A, 0x2A, 0x6B, 0xD0, 0x6A, 0xF8, 0x7A, 0x05, 0x12
.byte 0x74, 0xED, 0xD9, 0x48, 0x4E, 0x95, 0xA7, 0xE4, 0x8D, 0xB0, 0xD8, 0x75, 0xE5, 0xBE, 0xC2, 0x87
.byte 0x10, 0xAF, 0x41, 0xB4, 0xE8, 0xA3, 0x0E, 0x13, 0x0E, 0xDF, 0x7D, 0x07, 0x59, 0x83, 0x1A, 0xCD
.byte 0x70, 0xF4, 0x16, 0xBE, 0x89, 0xBE, 0xA3, 0x17, 0x6E, 0x7B, 0x8D, 0x54, 0x39, 0x4F, 0xDB, 0x4A
.byte 0xFE, 0x1C, 0xFE, 0xE7, 0xC0, 0x0D, 0xFA, 0xCE, 0xEC, 0x77, 0xD5, 0x46, 0xFA, 0xF0, 0x14, 0x6B
.byte 0xE4, 0x2A, 0x29, 0x6E, 0xE9, 0xCC, 0x85, 0x57, 0x48, 0x13, 0xAC, 0x82, 0x63, 0x88, 0xCC, 0x62
.byte 0xA5, 0xCB, 0x49, 0x65, 0xD9, 0x43, 0x33, 0xC5, 0xBB, 0x09, 0x0B, 0xB6, 0xF9, 0x1F, 0x21, 0xDD
.byte 0x4A, 0x4B, 0x4B, 0x33, 0x18, 0xD1, 0x8B, 0x60, 0xE4, 0x37, 0xE3, 0x48, 0xBF, 0xAF, 0xAA, 0x65
.byte 0x7B, 0xF3, 0xCA, 0x54, 0x37, 0xFE, 0x1A, 0xF2, 0x07, 0x25, 0xA9, 0x01, 0x45, 0xCA, 0xDF, 0x8F
.byte 0x16, 0x2B, 0xC3, 0x2E, 0xFD, 0x4E, 0x8F, 0xE2, 0x86, 0x72, 0x2A, 0x46, 0x22, 0xD4, 0xAB, 0x9D
.byte 0xC7, 0x75, 0xF2, 0xFE, 0x73, 0x0C, 0xF1, 0x7B, 0x32, 0x9A, 0x7D, 0x77, 0x65, 0x5C, 0x07, 0x7B
.byte 0x88, 0xCA, 0xAA, 0x85, 0x19, 0x39, 0x67, 0x9F, 0xAB, 0x91, 0xE6, 0xCD, 0x65, 0x91, 0x6B, 0x2C
.byte 0x06, 0x5D, 0x2B, 0x7A, 0x6A, 0x1D, 0xF6, 0x9C, 0xB7, 0x73, 0x14, 0x1D, 0xD0, 0x1B, 0x98, 0x58
.byte 0xE6, 0x42, 0xDD, 0xFF, 0x7C, 0x44, 0x9F, 0x27, 0xD5, 0x85, 0xF5, 0x3A, 0x16, 0x61, 0x67, 0x1D
.byte 0xBF, 0x93, 0x98, 0x2A, 0xB0, 0x8E, 0xC6, 0x68, 0x02, 0xDA, 0x85, 0xD2, 0xF5, 0x1E, 0x2A, 0xDB
.byte 0x61, 0x07, 0xDB, 0xDD, 0x4B, 0x7A, 0x05, 0x21, 0xFF, 0xFB, 0x5C, 0x16, 0x5D, 0xC4, 0x34, 0x1D
.byte 0x57, 0xCC, 0x47, 0x08, 0x5B, 0x0D, 0x71, 0x5D, 0xE8, 0xF7, 0x2F, 0xDE, 0x16, 0x5A, 0xBA, 0x77
.byte 0x61, 0x95, 0x55, 0xAD, 0x10, 0x5A, 0xCF, 0x10, 0x56, 0x2B, 0x26, 0xB3, 0xF0, 0x5A, 0xD1, 0x48
.byte 0x27, 0x18, 0x50, 0x82, 0x25, 0xC2, 0xDF, 0x0E, 0xB9, 0x0F, 0xEC, 0xD0, 0x69, 0xA6, 0x47, 0xCB
.byte 0x3C, 0x9D, 0x79, 0x4C, 0xF8, 0x48, 0x5C, 0x4E, 0x74, 0x83, 0x02, 0x64, 0xDD, 0xD3, 0xAC, 0x05
.byte 0xEB, 0xFD, 0x87, 0x11, 0xC0, 0x66, 0x20, 0x7A, 0x76, 0x0C, 0x4A, 0xDF, 0xB3, 0x92, 0xAB, 0xEF
.byte 0x2F, 0x24, 0x3B, 0x27, 0x6D, 0x98, 0x76, 0xE1, 0x1B, 0x78, 0x46, 0xF9, 0x4C, 0xF3, 0xFE, 0x38
.byte 0xF1, 0x85, 0x4A, 0xB1, 0xEC, 0x6A, 0x2C, 0x62, 0x77, 0x76, 0x42, 0x2A, 0x09, 0xED, 0x19, 0x38
.byte 0x11, 0x54, 0x60, 0x7E, 0xED, 0xD6, 0x60, 0x08, 0x4F, 0xA7, 0x02, 0x9C, 0x9B, 0x00, 0xD4, 0x8C
.byte 0x86, 0x1F, 0x3E, 0x73, 0x8A, 0x6A, 0xD5, 0x01, 0xE1, 0x18, 0x2B, 0xEA, 0x05, 0x44, 0x23, 0x16
.byte 0x99, 0x83, 0x95, 0x86, 0x59, 0xF6, 0x8F, 0xA9, 0x9D, 0x92, 0x45, 0x38, 0x93, 0x1A, 0xC5, 0x19
.byte 0x39, 0x03, 0x8D, 0xC3, 0x6E, 0x63, 0xC5, 0x50, 0x7B, 0xF0, 0x3B, 0x80, 0x35, 0x5E, 0x97, 0xCE
.byte 0xE2, 0x2C, 0x55, 0x3C, 0x23, 0xE5, 0xE5, 0xC0, 0x77, 0x2B, 0xF9, 0x0B, 0x45, 0xBE, 0x25, 0x7F
.byte 0xC2, 0xB2, 0x42, 0x31, 0x15, 0x07, 0x81, 0x90, 0xF8, 0xBC, 0x10, 0x2D, 0x1B, 0xA7, 0xFC, 0xFD
.byte 0xD4, 0x52, 0x3A, 0xF7, 0x38, 0x1F, 0xB8, 0xB0, 0x4A, 0xB1, 0xBB, 0x90, 0x70, 0xE0, 0x0F, 0x33
.byte 0x92, 0x51, 0x64, 0xA8, 0x59, 0xE6, 0x38, 0x52, 0xA3, 0x49, 0x7F, 0xBE, 0xF1, 0x7C, 0xBC, 0xC6
.byte 0xCF, 0xF6, 0xBD, 0x07, 0x16, 0x76, 0xB7, 0x60, 0x28, 0x73, 0xF1, 0x98, 0x53, 0x00, 0xCC, 0xE6
.byte 0x52, 0x30, 0x8E, 0xAC, 0x16, 0xC7, 0xFE, 0xBA, 0x10, 0x7E, 0x78, 0x01, 0xFA, 0x35, 0xC7, 0xCA
.byte 0x2B, 0x85, 0xD1, 0x41, 0xFB, 0x89, 0xA2, 0x24, 0xFC, 0x93, 0xBC, 0x50, 0x94, 0x89, 0x36, 0xE6
.byte 0xB9, 0xC5, 0x92, 0xD0, 0x8C, 0x90, 0x8A, 0x9D, 0x0F, 0x03, 0x9F, 0x0A, 0x38, 0x67, 0xD4, 0x64
.byte 0xED, 0xA6, 0xA6, 0xE8, 0x2F, 0x49, 0x0D, 0x2C, 0xDD, 0xCA, 0x7C, 0x71, 0x53, 0xB3, 0x57, 0x0C
.byte 0x79, 0xE9, 0xDD, 0x05, 0x7A, 0x68, 0xA3, 0x89, 0x6B, 0x42, 0x93, 0xA4, 0xA9, 0x67, 0x09, 0x96
.byte 0x0D, 0xAF, 0x7F, 0x3D, 0xF8, 0x8C, 0x6A, 0xD5, 0x57, 0xE6, 0x47, 0xAA, 0x9A, 0x9E, 0xB6, 0x14
.byte 0x88, 0x94, 0x1A, 0x03, 0xFD, 0xBD, 0x8D, 0x69, 0xFF, 0x20, 0x0D, 0xA9, 0x88, 0x16, 0x40, 0x96
.byte 0xC6, 0xC0, 0xD4, 0xBE, 0x4D, 0x3E, 0x94, 0xA4, 0x25, 0xDB, 0x4E, 0xC0, 0x7A, 0x05, 0xD4, 0x03
.byte 0x9A, 0xEE, 0x06, 0x97, 0xAB, 0x93, 0x00, 0xAB, 0xB4, 0x0D, 0x55, 0x3D, 0x24, 0x96, 0xD4, 0xEB
.byte 0x56, 0xA8, 0xA9, 0xA4, 0xE7, 0x3E, 0x48, 0x0D, 0x1A, 0x97, 0xCD, 0x94, 0x9C, 0xA1, 0x97, 0x36
.byte 0x90, 0x9D, 0xCE, 0x3C, 0x31, 0xCE, 0xE7, 0xE6, 0xDC, 0x3D, 0x23, 0x00, 0xD3, 0xF8, 0xEB, 0x29
.byte 0xA0, 0x95, 0xCD, 0x88, 0xD4, 0x16, 0x95, 0xEE, 0xAD, 0x62, 0x82, 0x4A, 0x04, 0x1A, 0x81, 0x94
.byte 0xB8, 0x4F, 0xD1, 0xE9, 0x1D, 0xB8, 0xCF, 0xF9, 0xF6, 0xF3, 0xFA, 0xC9, 0xEB, 0xE6, 0xF3, 0x8C
.byte 0x7C, 0xC1, 0x14, 0x50, 0xD7, 0xAA, 0x3F, 0x85, 0x0D, 0xC1, 0xCF, 0x12, 0xDB, 0x51, 0xA7, 0x93
.byte 0xA0, 0x78, 0x7D, 0xBD, 0x31, 0x4D, 0xB7, 0x27, 0x40, 0xB2, 0xF0, 0x2C, 0x99, 0xE4, 0xB8, 0x15
.byte 0xA5, 0xCD, 0x66, 0x7D, 0x78, 0xA5, 0x02, 0x85, 0x67, 0xD2, 0x97, 0x43, 0x23, 0x3E, 0xD7, 0xC4
.byte 0xB7, 0x55, 0x82, 0xE8, 0xA2, 0x39, 0x0F, 0xE3, 0xEC, 0xFF, 0x0F, 0x85, 0xE3, 0xC8, 0x9B, 0x89
.byte 0x96, 0x02, 0x06, 0x0E, 0xA8, 0x09, 0x93, 0x10, 0xDC, 0x2B, 0x53, 0xFF, 0x6A, 0x2B, 0xC4, 0x21
.byte 0x80, 0x46, 0x09, 0x22, 0x80, 0x19, 0x06, 0x6C, 0x18, 0x15, 0xF2, 0xFC, 0xDD, 0x8E, 0x86, 0x74
.byte 0x91, 0x8C, 0x82, 0x3A, 0x95, 0x16, 0x4A, 0x72, 0x42, 0x9E, 0x71, 0xAC, 0xC9, 0x35, 0xCE, 0x49
.byte 0x7C, 0xD8, 0x6C, 0xFC, 0xF1, 0x72, 0x69, 0x0A, 0x87, 0x5C, 0x06, 0x65, 0xEA, 0x8C, 0xD9, 0x7C
.byte 0x19, 0x5C, 0xB6, 0xAF, 0x72, 0x00, 0x21, 0xB4, 0x9E, 0x93, 0x61, 0x67, 0xC9, 0x2F, 0xB1, 0x45
.byte 0x08, 0x1D, 0x42, 0xF9, 0x8F, 0xAB, 0x03, 0x17, 0x07, 0x0A, 0x7D, 0xF2, 0x97, 0x57, 0x6E, 0xB0
.byte 0xB3, 0x24, 0x60, 0x26, 0x24, 0x81, 0xDB, 0xC2, 0x15, 0x3C, 0x2A, 0xDE, 0x6C, 0xDB, 0x24, 0x74
.byte 0xF9, 0x66, 0x6D, 0x89, 0x11, 0x71, 0xA1, 0x19, 0x7B, 0x1F, 0x0B, 0x12, 0x76, 0x79, 0xC3, 0x2A
.byte 0x9D, 0x23, 0x51, 0xC2, 0xA5, 0x2C, 0x85, 0xBA, 0x68, 0xAF, 0x98, 0xD5, 0x8B, 0xBC, 0x49, 0x85
.byte 0x23, 0xB7, 0x0F, 0x34, 0x29, 0xB0, 0x4D, 0xA4, 0xCF, 0x59, 0xB7, 0x46, 0xD2, 0x7B, 0x71, 0x70
.byte 0x9E, 0xC2, 0x32, 0x43, 0xEE, 0xB7, 0xFE, 0x57, 0x67, 0x96, 0x2D, 0xF3, 0x53, 0x76, 0x78, 0x76
.byte 0x2E, 0x87, 0xAB, 0x57, 0x38, 0xF9, 0xFC, 0x08, 0x52, 0xB3, 0x4E, 0x24, 0x2E, 0xC0, 0x95, 0xCD
.byte 0x82, 0xC7, 0x11, 0x71, 0x7E, 0x0F, 0xC9, 0xE6, 0xA6, 0xF6, 0xD9, 0xFA, 0x6D, 0x52, 0x71, 0x9C
.byte 0xDA, 0x1D, 0xF3, 0x13, 0x16, 0xF0, 0x1B, 0x68, 0xA3, 0x6A, 0x8D, 0xD2, 0x2A, 0x22, 0xA0, 0xAD
.byte 0xEA, 0xB2, 0x1E, 0x69, 0xC2, 0xE8, 0x4F, 0x69, 0xDF, 0x29, 0x63, 0x4C, 0x7C, 0xD5, 0xE8, 0x56
.byte 0xF2, 0xDC, 0x69, 0x08, 0xCC, 0x85, 0x71, 0x70, 0xEF, 0xFF, 0x43, 0x19, 0x22, 0xE4, 0xC6, 0x0C
.byte 0x96, 0xE5, 0x75, 0x59, 0xCE, 0xC5, 0xC2, 0xAD, 0xEE, 0x26, 0xF9, 0x6A, 0xFB, 0xE2, 0xC1, 0xED
.byte 0xBF, 0x2B, 0xF6, 0x8C, 0xB0, 0x67, 0xFD, 0x9F, 0x67, 0x40, 0xB9, 0x89, 0x25, 0x7F, 0x95, 0xBB
.byte 0x65, 0x0B, 0x14, 0x33, 0xD0, 0xD7, 0xE0, 0xBE, 0xFD, 0xDA, 0x29, 0xF8, 0xBD, 0xEA, 0xE6, 0x7D
.byte 0x15, 0xDC, 0x09, 0xC6, 0x44, 0x06, 0x66, 0xAB, 0x47, 0x1F, 0x34, 0x6C, 0x9F, 0xCA, 0x28, 0x04
.byte 0xD5, 0x3D, 0x38, 0xA5, 0x14, 0x19, 0x64, 0x11, 0xF4, 0x8D, 0x0A, 0xB2, 0x78, 0xF0, 0x2F, 0x8E
.byte 0xCC, 0x38, 0x54, 0x10, 0x3F, 0xBA, 0xBC, 0x86, 0xD9, 0xF1, 0xF3, 0x79, 0xBB, 0x1B, 0x7D, 0x91
.byte 0x59, 0xB6, 0x36, 0x6D, 0xCF, 0x9B, 0x7F, 0xC4, 0x28, 0x89, 0x76, 0xA0, 0x79, 0xA5, 0x2E, 0x46
.byte 0xDE, 0x83, 0x57, 0x1D, 0x3D, 0x13, 0xA4, 0x17, 0x04, 0x98, 0x90, 0xC0, 0xB3, 0x0E, 0x51, 0x0D
.byte 0xC4, 0x88, 0x7A, 0x94, 0x23, 0xFA, 0x58, 0x4C, 0x84, 0xCE, 0xEC, 0xFD, 0x74, 0x1B, 0x44, 0x52
.byte 0x9E, 0x9B, 0x70, 0xDC, 0xAF, 0x14, 0xF3, 0xB4, 0xAD, 0x84, 0x75, 0x61, 0x92, 0xC6, 0x6E, 0x56
.byte 0x4F, 0xE9, 0xEB, 0x73, 0xE3, 0x43, 0xBF, 0x67, 0x12, 0xAC, 0x65, 0x86, 0xC8, 0xAA, 0xD8, 0x66
.byte 0x45, 0x48, 0x43, 0xF5, 0x5D, 0x36, 0xA9, 0x0A, 0xBA, 0x1E, 0x6B, 0x4D, 0xE5, 0xDA, 0xA4, 0x35
.byte 0xC3, 0x8F, 0xA8, 0xA7, 0xD3, 0x68, 0x0E, 0xE5, 0x15, 0x74, 0x6B, 0xDD, 0x1E, 0x44, 0x44, 0x64
.byte 0x8D, 0x87, 0x59, 0xEB, 0xBE, 0x03, 0xF6, 0x79, 0x22, 0x62, 0xC6, 0x07, 0x3C, 0x6A, 0x3D, 0xFF
.byte 0xFA, 0xE5, 0xA6, 0xCD, 0x4E, 0xB5, 0xB2, 0x63, 0x29, 0x1E, 0x41, 0x48, 0x63, 0x86, 0xAC, 0xF0
.byte 0x0E, 0x05, 0xDC, 0xCD, 0x09, 0xD2, 0x46, 0x2B, 0x34, 0x0D, 0x32, 0x70, 0x78, 0x6F, 0x70, 0x72
.byte 0x55, 0x17, 0x3F, 0xA4, 0xCC, 0xF2, 0x08, 0xF6, 0x11, 0x4A, 0x3E, 0x74, 0xD0, 0xEA, 0x65, 0xDF
.byte 0xF0, 0x41, 0xAC, 0xF9, 0x13, 0xF2, 0x24, 0x48, 0xFF, 0x57, 0xB9, 0x77, 0xC7, 0x29, 0xEA, 0x1D
.byte 0x40, 0x29, 0xC1, 0x0D, 0x1B, 0xCA, 0x03, 0x2D, 0x14, 0x41, 0xA1, 0xE5, 0x2C, 0x06, 0xC4, 0x1C
.byte 0x48, 0x70, 0x16, 0x5C, 0x62, 0x3B, 0xA4, 0x62, 0x93, 0x5E, 0xDA, 0x5A, 0x87, 0xC4, 0x78, 0xC8
.byte 0xEE, 0x3A, 0xD6, 0x0A, 0x04, 0xD9, 0x37, 0x18, 0x1B, 0xD8, 0xFD, 0x48, 0xDF, 0xC1, 0x65, 0x27
.byte 0x32, 0x7B, 0x83, 0x94, 0xB7, 0x28, 0xF7, 0x4A, 0x86, 0xD2, 0xA5, 0x0E, 0x96, 0x1D, 0xD7, 0x85
.byte 0x57, 0xAD, 0x8F, 0x5C, 0x87, 0xC6, 0x75, 0xA3, 0x9F, 0x73, 0xEC, 0x7F, 0x35, 0x51, 0xA6, 0x67
.byte 0xCD, 0x2A, 0xFC, 0x84, 0x53, 0xF3, 0xCE, 0xDA, 0xC5, 0x73, 0xE8, 0x5C, 0x91, 0xC0, 0xE1, 0xE8
.byte 0x6E, 0x70, 0x45, 0xF6, 0x37, 0xBA, 0x9A, 0xD7, 0x2D, 0x86, 0x56, 0x62, 0xD7, 0xFD, 0xCA, 0xA4
.byte 0x28, 0xC6, 0x29, 0x7B, 0xB9, 0xF7, 0x55, 0x7E, 0x6B, 0x3E, 0xDB, 0xFC, 0xFE, 0xBC, 0xE5, 0x6D
.byte 0x2D, 0x2A, 0x63, 0x64, 0xE5, 0xFD, 0x3B, 0x12, 0x84, 0x92, 0x75, 0x5B, 0x8F, 0x3F, 0x00, 0xB7
.byte 0x05, 0x2A, 0x32, 0xBF, 0x22, 0x88, 0x3E, 0x8D, 0xC6, 0x19, 0x8A, 0xC5, 0xD5, 0x70, 0x32, 0x03
.byte 0x9A, 0x96, 0x67, 0x80, 0x94, 0xA3, 0x93, 0x18, 0x35, 0x08, 0x74, 0xC4, 0x48, 0x74, 0x7C, 0x4E
.byte 0x9F, 0xAF, 0x0D, 0xC1, 0x37, 0x4B, 0x4F, 0xFE, 0x65, 0xD9, 0xC4, 0x3B, 0x49, 0xF7, 0x3E, 0xE4
.byte 0x8D, 0xA5, 0x64, 0x22, 0x49, 0xF7, 0x3A, 0x7E, 0x00, 0xAE, 0x43, 0x49, 0x23, 0xC0, 0x97, 0xC2
.byte 0x6F, 0xA4, 0x83, 0xA7, 0xF0, 0xD2, 0xA6, 0x55, 0xAC, 0x6A, 0x90, 0xF6, 0x61, 0xCF, 0xDA, 0xEF
.byte 0x74, 0x3F, 0x11, 0xBD, 0x37, 0x4C, 0x3C, 0x38, 0xFA, 0x80, 0x81, 0x1E, 0x40, 0x18, 0xE0, 0xAF
.byte 0xBD, 0x64, 0x57, 0xAE, 0x37, 0xFD, 0x04, 0xE4, 0x67, 0x95, 0xDA, 0xC9, 0x64, 0xB5, 0xB9, 0xD8
.byte 0xF5, 0xCB, 0x96, 0x2C, 0x17, 0xD3, 0x64, 0x12, 0x54, 0xE6, 0x30, 0x94, 0xFE, 0x11, 0x44, 0xBC
.byte 0x76, 0x9B, 0x6A, 0xAE, 0x99, 0x6E, 0x92, 0x00, 0x03, 0x6D, 0xCA, 0x67, 0x22, 0x84, 0x40, 0x17
.byte 0x4F, 0xD7, 0x44, 0x67, 0xAB, 0xA8, 0x79, 0xFF, 0x8E, 0xAA, 0x94, 0x8D, 0xBC, 0xD8, 0x49, 0x32
.byte 0x74, 0xB4, 0xE0, 0x0D, 0x22, 0x73, 0x0E, 0x26, 0xE0, 0xD9, 0x8E, 0x02, 0x5D, 0xCE, 0x1A, 0xAC
.byte 0xA6, 0x5E, 0x14, 0x51, 0x07, 0x8D, 0x51, 0x96, 0x38, 0xE5, 0x23, 0xF4, 0xBE, 0x6D, 0x26, 0x32
.byte 0x21, 0x07, 0x40, 0x44, 0x7A, 0x4E, 0x6A, 0x5A, 0x28, 0xF8, 0x5D, 0x85, 0xC7, 0x77, 0x32, 0x6E
.byte 0xD5, 0x46, 0xC0, 0xDC, 0xD4, 0x11, 0x72, 0x0C, 0xF6, 0x96, 0x00, 0xB4, 0x03, 0x27, 0xE7, 0x25
.byte 0x2F, 0x28, 0x69, 0xA9, 0x76, 0xD3, 0x04, 0x9F, 0xCC, 0x61, 0x24, 0x94, 0xD9, 0x56, 0x02, 0xAE
.byte 0x9C, 0xC2, 0x8B, 0x70, 0xD4, 0xFE, 0x7D, 0xCB, 0x94, 0x7D, 0x7F, 0x98, 0xA5, 0x67, 0xBD, 0xD4
.byte 0x8F, 0x26, 0x7E, 0x06, 0xFA, 0x83, 0xA5, 0xC7, 0xE5, 0xCA, 0x5B, 0xBE, 0x20, 0x5E, 0x6D, 0xBD
.byte 0x21, 0xF8, 0x2E, 0xF5, 0xF6, 0xAB, 0xC0, 0x8B, 0x29, 0x40, 0x23, 0xCF, 0xA8, 0xE0, 0xA3, 0x37
.byte 0x07, 0x22, 0x3E, 0x02, 0xA5, 0xE3, 0xC9, 0x8A, 0xAD, 0x25, 0x49, 0xCE, 0x83, 0xB6, 0x8C, 0xA4
.byte 0xAE, 0xBA, 0x99, 0xA5, 0x65, 0x5A, 0x30, 0x8F, 0x9A, 0x54, 0x5E, 0x42, 0x35, 0x02, 0x7A, 0x3C
.byte 0x24, 0xB8, 0x3E, 0xCA, 0x9C, 0x08, 0x55, 0x4A, 0x2D, 0x9E, 0x19, 0xB0, 0x54, 0xA5, 0x55, 0x02
.byte 0x5F, 0xEE, 0xA8, 0xC5, 0x49, 0xD8, 0x54, 0xE4, 0x2C, 0xB3, 0x27, 0x61, 0xB5, 0xA1, 0x9E, 0xDA
.byte 0x5A, 0xDD, 0xA4, 0xF7, 0xE5, 0xFA, 0x41, 0x13, 0x98, 0x5B, 0xC3, 0xED, 0x00, 0x18, 0xF0, 0x60
.byte 0x07, 0x98, 0x25, 0x50, 0x71, 0x7A, 0x35, 0x9E, 0x2D, 0x5C, 0x00, 0xE3, 0xFE, 0x9E, 0xBD, 0x58
.byte 0x7C, 0x62, 0x50, 0x62, 0x5C, 0x92, 0x75, 0xF5, 0xED, 0x39, 0xE2, 0xEE, 0x51, 0xD2, 0x4E, 0x59
.byte 0x6B, 0x74, 0xAA, 0xDC, 0xEE, 0xDF, 0x7B, 0x1C, 0x3B, 0x7B, 0xFF, 0x3A, 0x1A, 0xBC, 0x93, 0x96
.byte 0x1E, 0xE3, 0xF8, 0x7B, 0x75, 0x6E, 0x71, 0x63, 0xA7, 0x53, 0x51, 0xF9, 0x26, 0x9F, 0x52, 0x92
.byte 0x13, 0xFC, 0x6F, 0x02, 0xDC, 0xEA, 0x1E, 0x17, 0x65, 0x1D, 0x52, 0x7F, 0xD9, 0xE5, 0x16, 0xF8
.byte 0xC8, 0x0F, 0x74, 0x3D, 0x7D, 0xE5, 0xA0, 0x24, 0x39, 0xF2, 0x1D, 0x5F, 0x91, 0x70, 0xF2, 0xA5
.byte 0x6C, 0x61, 0xA7, 0x48, 0x4B, 0xC5, 0x60, 0xB0, 0xE2, 0xB2, 0x30, 0xBC, 0x97, 0x46, 0xB4, 0x60
.byte 0x55, 0x29, 0x9E, 0xD3, 0x0E, 0x3F, 0xF7, 0x47, 0x31, 0x15, 0xA7, 0xC2, 0x85, 0x99, 0x67, 0xF2
.byte 0xFB, 0x0E, 0x3A, 0x46, 0xD4, 0x9B, 0xF7, 0xB6, 0x4E, 0x28, 0x73, 0xE6, 0x6E, 0x27, 0x46, 0xC4
.byte 0x51, 0xE4, 0x97, 0x5F, 0x23, 0x8F, 0xA7, 0x54, 0xA4, 0x4E, 0x17, 0x29, 0xE8, 0x7F, 0x1B, 0xE4
.byte 0x8E, 0x56, 0x2A, 0x62, 0xF2, 0x22, 0x19, 0x40, 0x4A, 0x8C, 0x26, 0xB9, 0xB4, 0x6D, 0x7D, 0x05
.byte 0x51, 0x14, 0x64, 0x75, 0xA4, 0x0C, 0xC9, 0x48, 0x5B, 0xE1, 0x72, 0x44, 0x60, 0x8D, 0x28, 0xEE
.byte 0xE4, 0x53, 0x50, 0xD6, 0x75, 0x69, 0x16, 0xC0, 0xF6, 0x3D, 0x79, 0xAA, 0xAA, 0xF6, 0xAF, 0xFC
.byte 0x0B, 0x14, 0x71, 0xAF, 0x21, 0x3B, 0xF8, 0x7C, 0x1C, 0x6A, 0xC0, 0x7C, 0xF8, 0xE8, 0x6A, 0xDC
.byte 0x3B, 0xBB, 0xB3, 0xB1, 0x25, 0xCA, 0x71, 0x1B, 0x07, 0xEB, 0xC6, 0xB2, 0xE1, 0x76, 0xAE, 0xED
.byte 0x8A, 0x1F, 0x9D, 0xAB, 0x5A, 0x95, 0x28, 0x76, 0x00, 0xE8, 0xF3, 0xF8, 0xD1, 0x5E, 0xD5, 0x0D
.byte 0x1A, 0x88, 0xBE, 0x3F, 0x52, 0x30, 0x5B, 0x5A, 0x1B, 0x22, 0x0C, 0xFD, 0x98, 0xBB, 0xEB, 0x23
.byte 0xDB, 0x88, 0xCF, 0x36, 0x1E, 0xF7, 0xAD, 0x1E, 0xE0, 0xA0, 0x17, 0xB1, 0xFE, 0xEC, 0xBE, 0x18
.byte 0x74, 0x7D, 0x58, 0xC7, 0xAD, 0xB4, 0x21, 0xC9, 0xD6, 0x2E, 0xC7, 0x6E, 0xEA, 0xB2, 0x91, 0xC5
.byte 0x3B, 0x61, 0xFB, 0x59, 0x58, 0xA8, 0x78, 0x38, 0x49, 0x8F, 0xE9, 0x48, 0x7B, 0xA8, 0x61, 0xF0
.byte 0x25, 0xBA, 0xB7, 0xD3, 0x6E, 0xD9, 0x9D, 0x45, 0x08, 0x64, 0xB4, 0xF2, 0x16, 0x46, 0xB7, 0x51
.byte 0xA7, 0xB3, 0xAB, 0xFF, 0x5C, 0x23, 0x38, 0xA6, 0xB2, 0x22, 0xEE, 0x2E, 0xCA, 0x4F, 0x1E, 0xF0
.byte 0x09, 0xD5, 0xC4, 0x78, 0xAF, 0x62, 0xBD, 0xB7, 0xC6, 0x72, 0xA9, 0xDD, 0xB8, 0x61, 0x2F, 0x5F
.byte 0x15, 0xDA, 0x5F, 0x71, 0xFE, 0x97, 0x17, 0xB1, 0xB9, 0x06, 0xDF, 0x84, 0x56, 0xFE, 0x75, 0x60
.byte 0xD3, 0x3A, 0xD8, 0x83, 0x9C, 0x96, 0x3A, 0x63, 0x08, 0xE3, 0x40, 0xC1, 0x45, 0x6F, 0x20, 0x5A
.byte 0x4A, 0x7F, 0xCC, 0x49, 0x17, 0xE4, 0xFA, 0xD1, 0xEA, 0xDA, 0x56, 0x40, 0xD8, 0xCB, 0xA0, 0xAC
.byte 0x06, 0x79, 0x2F, 0xA3, 0x10, 0x69, 0x06, 0x19, 0x4D, 0x47, 0xDA, 0x92, 0xB7, 0xFB, 0xED, 0x02
.byte 0x7B, 0xB9, 0x4B, 0x93, 0x9D, 0x45, 0x64, 0x88, 0x20, 0xBA, 0xC9, 0xF8, 0x86, 0x6A, 0xA5, 0x8D
.byte 0xE4, 0xD5, 0x30, 0xF4, 0x3E, 0x37, 0x0E, 0x8C, 0x7E, 0xE9, 0x1F, 0x35, 0xE5, 0x0C, 0x37, 0x60
.byte 0xC6, 0x82, 0xF3, 0x64, 0xC8, 0x58, 0xED, 0xE9, 0x13, 0xB6, 0xE2, 0x99, 0x21, 0x87, 0x27, 0x05
.byte 0x5C, 0x57, 0xFA, 0x9B, 0x8E, 0x09, 0x28, 0x0C, 0xF2, 0x47, 0x42, 0xD7, 0x54, 0x7A, 0x38, 0x1B
.byte 0xFD, 0x2C, 0x7F, 0xC5, 0x84, 0x6D, 0xAF, 0x98, 0x23, 0x91, 0x32, 0x45, 0x18, 0x59, 0x4A, 0x75
.byte 0xB0, 0x44, 0x11, 0x3F, 0x4D, 0x39, 0x4C, 0x40, 0x81, 0x8E, 0x18, 0xD5, 0x09, 0x51, 0xF1, 0x06
.byte 0x7D, 0x71, 0xCC, 0x02, 0xDE, 0x7B, 0x9A, 0x02, 0x0C, 0xCC, 0x47, 0x25, 0x26, 0x91, 0x9A, 0xD6
.byte 0xD6, 0xAB, 0x16, 0x24, 0xE4, 0x62, 0x65, 0x66, 0xF1, 0x7D, 0x3B, 0xFA, 0xCE, 0x2C, 0x00, 0x4C
.byte 0x9D, 0xCC, 0x4F, 0x7C, 0x48, 0xEA, 0x7E, 0x54, 0xB7, 0xC5, 0x79, 0xDD, 0x57, 0x14, 0xB4, 0x2D
.byte 0xC0, 0xCA, 0x51, 0xA4, 0x2D, 0xB6, 0x0A, 0x1E, 0x34, 0x46, 0x19, 0x03, 0x73, 0x1A, 0x4F, 0x11
.byte 0xE7, 0x9E, 0x8D, 0x2F, 0x88, 0x0B, 0x84, 0x3F, 0xD0, 0xFD, 0x1D, 0x27, 0x12, 0xD1, 0x55, 0xD2
.byte 0x9B, 0xA7, 0x77, 0xC8, 0x5E, 0x82, 0xE7, 0x92, 0xC8, 0x00, 0x95, 0x3C, 0x1A, 0xE5, 0x4D, 0x01
.byte 0x84, 0xDA, 0x31, 0x0D, 0xE6, 0xB5, 0x4D, 0xB7, 0xB2, 0x6A, 0xDE, 0xC5, 0x3B, 0x34, 0x97, 0xD6
.byte 0xDB, 0x0E, 0x9E, 0x39, 0x90, 0x85, 0xCC, 0x59, 0x86, 0x62, 0x95, 0xA0, 0x47, 0xE3, 0xA2, 0xCB
.byte 0xBD, 0xD3, 0xD9, 0xA4, 0x88, 0x26, 0x5B, 0x3B, 0x90, 0x3A, 0x00, 0xCB, 0x6E, 0x97, 0xA1, 0x4A
.byte 0xA6, 0x40, 0x84, 0x36, 0xC6, 0x50, 0x8F, 0x4D, 0xB3, 0x25, 0xED, 0xFA, 0x08, 0x90, 0xC6, 0xC6
.byte 0x64, 0x9F, 0x6A, 0xEC, 0xC5, 0xC5, 0x28, 0x55, 0x00, 0x29, 0x21, 0x6E, 0xC1, 0xC3, 0xB9, 0x67
.byte 0x04, 0x3D, 0x9D, 0xCA, 0x8E, 0x2D, 0x17, 0x41, 0x52, 0x05, 0x3C, 0x5A, 0x96, 0x02, 0x21, 0xFA
.byte 0xA2, 0x8B, 0xE6, 0x68, 0x51, 0x0F, 0xBE, 0x51, 0x38, 0xDF, 0xC0, 0xF9, 0xA2, 0x79, 0x60, 0xA6
.byte 0xB7, 0xFE, 0x71, 0x45, 0x2B, 0x89, 0x86, 0x7E, 0x8E, 0xC3, 0xD9, 0x25, 0xC5, 0xFA, 0x1F, 0x68
.byte 0x85, 0x05, 0xD0, 0xD7, 0x15, 0x8E, 0x28, 0x4D, 0x6E, 0xE9, 0x47, 0x10, 0x63, 0xA8, 0xB7, 0x1A
.byte 0xA6, 0x29, 0x60, 0xD2, 0xB2, 0xE7, 0x51, 0x41, 0xAA, 0x2A, 0x66, 0x70, 0x24, 0x85, 0xD8, 0xAA
.byte 0x8B, 0xA9, 0x81, 0xA0, 0x37, 0xAA, 0xEE, 0xA6, 0x94, 0x35, 0xB7, 0xF7, 0xDE, 0x6E, 0x12, 0x84
.byte 0x97, 0x72, 0x57, 0x4A, 0x5A, 0xA8, 0x8B, 0x04, 0xD3, 0xF1, 0x74, 0xF8, 0x77, 0x4D, 0xA3, 0x02
.byte 0xF6, 0x25, 0xA3, 0x2E, 0xCF, 0x91, 0xD4, 0x64, 0xC7, 0x8B, 0x5C, 0xA5, 0xFA, 0x6E, 0x2A, 0x91
.byte 0xE1, 0x82, 0xDB, 0x3B, 0x2B, 0x67, 0x40, 0xFE, 0x59, 0xB4, 0xF6, 0xD0, 0x01, 0x9A, 0xD3, 0xF8
.byte 0xBF, 0x76, 0x26, 0x8E, 0x08, 0xFA, 0xF3, 0xCF, 0x86, 0x4F, 0x75, 0x80, 0xBE, 0x9F, 0x11, 0x9F
.byte 0x22, 0xED, 0xDB, 0x4D, 0x55, 0x1B, 0x4B, 0xAE, 0xCF, 0x42, 0x7E, 0xD1, 0xDC, 0x51, 0xC9, 0x9B
.byte 0xC8, 0xF0, 0x2A, 0xD0, 0xEA, 0x1E, 0xA0, 0x71, 0x6D, 0x15, 0xF1, 0x2B, 0xB5, 0x03, 0xCB, 0xD7
.byte 0xF0, 0xA6, 0x24, 0x46, 0xC1, 0x70, 0xF4, 0x91, 0xB3, 0x73, 0x62, 0x90, 0xC5, 0x2C, 0x2C, 0x8D
.byte 0x1C, 0x57, 0x5E, 0x07, 0x75, 0xFE, 0x78, 0xE3, 0x14, 0x69, 0x0E, 0xC9, 0x6C, 0xD9, 0xA0, 0x5D
.byte 0x80, 0xC5, 0xA3, 0x41, 0x36, 0x98, 0xD2, 0xE9, 0x0B, 0x35, 0x79, 0xD0, 0x62, 0xA6, 0x5D, 0x7E
.byte 0xFD, 0xBC, 0x86, 0x73, 0xBA, 0xFE, 0x56, 0xCE, 0x68, 0x64, 0x98, 0xD5, 0x3E, 0x39, 0x33, 0xBF
.byte 0xFE, 0xD7, 0x00, 0x34, 0x6F, 0xD3, 0x1E, 0x7A, 0x09, 0x98, 0x4B, 0x6B, 0x3E, 0xA8, 0xEA, 0x3C
.byte 0x64, 0x70, 0xAF, 0x1F, 0x6E, 0x05, 0xEE, 0xD7, 0x6A, 0x86, 0xAC, 0xA9, 0xBF, 0xDF, 0x68, 0xBE
.byte 0xB7, 0x68, 0xF3, 0x26, 0x3C, 0x11, 0xA1, 0x45, 0xAA, 0xEC, 0xB0, 0xE9, 0x95, 0x9B, 0x25, 0xF9
.byte 0x0B, 0xD4, 0x19, 0x7A, 0xDA, 0x07, 0x51, 0x44, 0x8E, 0xFE, 0xED, 0x4E, 0xDE, 0x55, 0x0D, 0x95
.byte 0xBE, 0x00, 0xBB, 0xFB, 0x12, 0x5D, 0x40, 0xBC, 0x49, 0xF1, 0xA6, 0xDE, 0x8C, 0xCB, 0xD8, 0x98
.byte 0xA0, 0xF1, 0x12, 0x7A, 0xF9, 0x63, 0xBE, 0x88, 0x61, 0xAC, 0xD6, 0x40, 0x01, 0xE3, 0xD5, 0xC0
.byte 0xE4, 0x91, 0xBB, 0xF6, 0xEE, 0xFC, 0xB3, 0x37, 0xED, 0x59, 0x16, 0x7A, 0x25, 0xEE, 0x12, 0xC5
.byte 0xE0, 0x24, 0x3F, 0xD9, 0x88, 0xFE, 0x62, 0xEA, 0xAA, 0x38, 0x2A, 0xAC, 0x1C, 0x00, 0x6C, 0x00
.byte 0x91, 0x27, 0xF6, 0x7F, 0x24, 0xAA, 0xB7, 0x12, 0x04, 0xCD, 0x8C, 0x29, 0xBB, 0x9F, 0xEE, 0x9C
.byte 0xC4, 0x2E, 0x76, 0x4D, 0x2C, 0xD8, 0x37, 0xD6, 0x10, 0x62, 0x82, 0x2C, 0x63, 0xEF, 0x2C, 0xF4
.byte 0x17, 0x23, 0x74, 0x3B, 0xCE, 0x2C, 0x4D, 0xD2, 0xF9, 0xDA, 0xFC, 0xB5, 0x79, 0xEA, 0x51, 0x3E
.byte 0x19, 0xC7, 0x8B, 0x45, 0x9F, 0xC3, 0x1C, 0xB0, 0x26, 0x9F, 0xDD, 0x89, 0x8F, 0x0A, 0x7E, 0xA6
.byte 0x2D, 0xF2, 0xE1, 0xFC, 0x1E, 0x2F, 0xCE, 0x18, 0x09, 0xCB, 0xCD, 0x83, 0xB6, 0x1F, 0xC1, 0xCF
.byte 0xE7, 0x4D, 0x15, 0x87, 0x10, 0x31, 0x37, 0x37, 0xD1, 0x14, 0xC0, 0x60, 0x1F, 0x3E, 0x06, 0x4C
.byte 0x31, 0xE8, 0x49, 0x50, 0x17, 0x18, 0x68, 0x21, 0xE3, 0x36, 0xA5, 0x99, 0x55, 0x66, 0x68, 0x3D
.byte 0xB4, 0x7D, 0xC4, 0xC5, 0xAF, 0xFB, 0xFC, 0x80, 0x10, 0xBC, 0xE0, 0x2F, 0xFB, 0xE7, 0x7C, 0x2C
.byte 0xD0, 0xC5, 0x7D, 0xE7, 0xDD, 0xE5, 0x09, 0xC0, 0x1C, 0xAE, 0x5A, 0x72, 0x15, 0xC2, 0xAF, 0xC9
.byte 0x3F, 0x73, 0x8E, 0xEF, 0x6F, 0x8B, 0x6F, 0x80, 0x47, 0x50, 0xAF, 0x43, 0x37, 0x2C, 0x6F, 0x07
.byte 0xF2, 0xED, 0xEF, 0xD0, 0xD2, 0xF9, 0x91, 0xEF, 0xA7, 0xEB, 0x61, 0xBD, 0xAD, 0x10, 0x87, 0xED
.byte 0x84, 0x16, 0xDC, 0xF3, 0xA1, 0x4C, 0x73, 0xE8, 0x9C, 0x23, 0x2B, 0xD4, 0x4F, 0x9B, 0xDC, 0x42
.byte 0x88, 0xCB, 0x12, 0x5B, 0xC5, 0xA3, 0x4B, 0x6D, 0x8E, 0xAC, 0x2A, 0x3C, 0xBD, 0xB1, 0x29, 0x41
.byte 0xC7, 0x06, 0x34, 0x68, 0x52, 0xA8, 0x51, 0xEE, 0xCB, 0x7D, 0xC2, 0x1B, 0x19, 0x9E, 0x5D, 0xA2
.byte 0x6A, 0x70, 0xFE, 0x2F, 0x13, 0x49, 0x9C, 0xA2, 0xF5, 0xC7, 0xDF, 0xB2, 0x79, 0x08, 0xF3, 0x41
.byte 0x0E, 0x28, 0xA9, 0x61, 0xD0, 0xFB, 0x4F, 0x9B, 0x79, 0x12, 0xB7, 0x92, 0xB1, 0x15, 0x35, 0x1C
.byte 0x85, 0x33, 0x4C, 0x99, 0x7C, 0xE9, 0x3B, 0x72, 0xB1, 0x1A, 0x24, 0x2A, 0x23, 0x18, 0x6B, 0x32
.byte 0x41, 0x15, 0x93, 0x11, 0x10, 0xE3, 0xAD, 0x8A, 0xF6, 0x64, 0x1C, 0xA8, 0x7A, 0x51, 0xC4, 0xFF
.byte 0x85, 0x11, 0x98, 0x02, 0xFB, 0xD4, 0x74, 0xAC, 0xEF, 0x99, 0xD6, 0x12, 0xB2, 0x41, 0x45, 0xF3
.byte 0x56, 0xD8, 0x04, 0x67, 0xBC, 0xB2, 0xF1, 0xB3, 0x17, 0x0E, 0x5B, 0x91, 0x60, 0x20, 0x90, 0xE5
.byte 0x31, 0x29, 0xE7, 0x2C, 0xFD, 0x5C, 0xD9, 0xEC, 0xF5, 0xAF, 0xFF, 0xA7, 0xF0, 0x44, 0x9A, 0x47
.byte 0x1D, 0x9F, 0xAF, 0xD9, 0x52, 0xA0, 0x8C, 0x69, 0xAF, 0xE8, 0xFB, 0x0F, 0x08, 0x8C, 0xF5, 0x3A
.byte 0xB5, 0xDD, 0x67, 0xB3, 0x39, 0x40, 0x9F, 0x2E, 0xEF, 0x9E, 0xD6, 0xE0, 0xE3, 0x71, 0x28, 0x00
.byte 0x11, 0xD7, 0xDA, 0x63, 0x78, 0x67, 0xCD, 0x27, 0x4F, 0xC9, 0x36, 0x58, 0x55, 0x2C, 0x92, 0x0B
.byte 0x09, 0xF9, 0xBE, 0x42, 0x39, 0x5E, 0x71, 0x29, 0xFD, 0x48, 0x09, 0xE0, 0xB9, 0x31, 0xE0, 0xCA
.byte 0x09, 0xBB, 0x2E, 0x81, 0x22, 0xFC, 0xA8, 0x72, 0xC5, 0xDF, 0xCA, 0x1A, 0x0B, 0x5C, 0x25, 0x14
.byte 0x56, 0xE4, 0x57, 0x90, 0x42, 0xC9, 0xB9, 0x3F, 0x11, 0xC3, 0x1F, 0xCA, 0xF5, 0x00, 0x95, 0xFE
.byte 0xBC, 0xC4, 0x7F, 0xDF, 0xC0, 0x27, 0x51, 0x85, 0x07, 0x1B, 0xA0, 0x12, 0x78, 0xC6, 0x27, 0xCE
.byte 0xAA, 0x7E, 0x5E, 0xEC, 0x48, 0x18, 0x2C, 0x59, 0xDB, 0x4C, 0x24, 0xD0, 0x4D, 0xBA, 0xCF, 0x09
.byte 0x7E, 0x4E, 0xE8, 0x3E, 0x76, 0x3A, 0xC4, 0x7E, 0x55, 0x64, 0x90, 0xCE, 0x2A, 0xB8, 0x9C, 0xD4
.byte 0x37, 0xFB, 0xC1, 0x7F, 0x14, 0xEE, 0xD8, 0xEF, 0x3A, 0xFD, 0xC0, 0x88, 0xB7, 0x90, 0x92, 0x36
.byte 0xDE, 0x7A, 0x75, 0x55, 0xB5, 0x39, 0xD3, 0x0A, 0x9E, 0x64, 0xD9, 0xC8, 0x1C, 0x76, 0x9D, 0x53
.byte 0x71, 0x5F, 0xD2, 0x86, 0x4D, 0xAB, 0x76, 0x88, 0xA9, 0x36, 0x11, 0x61, 0xC6, 0xA3, 0x97, 0xA5
.byte 0x1E, 0x0D, 0xFB, 0xD3, 0x46, 0xCF, 0xDE, 0xE5, 0x34, 0xB7, 0xAD, 0x50, 0x2D, 0x4B, 0xA4, 0x9F
.byte 0xAA, 0x77, 0x25, 0xF8, 0x22, 0x9B, 0x80, 0xCC, 0xD2, 0x91, 0x2D, 0x99, 0x35, 0xC5, 0x3F, 0x53
.byte 0xD2, 0x3B, 0x26, 0x19, 0x0A, 0x04, 0xFE, 0x3E, 0xBB, 0xAC, 0x8F, 0xE9, 0xF7, 0x33, 0x88, 0xA1
.byte 0xAA, 0xAE, 0x9A, 0xCD, 0x49, 0x1A, 0x99, 0x1C, 0xAC, 0xC6, 0xB5, 0xE1, 0x8B, 0xF5, 0x34, 0x5E
.byte 0x30, 0x5B, 0x77, 0x3B, 0x5F, 0x76, 0x79, 0x1B, 0x22, 0x09, 0x04, 0x19, 0x3C, 0x8D, 0xBB, 0xE7
.byte 0x3B, 0x55, 0xB5, 0x85, 0x70, 0x4E, 0xA1, 0x1D, 0x15, 0x57, 0xFE, 0xA1, 0x4C, 0x33, 0xFF, 0x7C
.byte 0x8F, 0x77, 0xB7, 0xEF, 0xED, 0x31, 0x0A, 0x0F, 0x3A, 0x0F, 0x29, 0x77, 0x9D, 0xE4, 0x5F, 0xD8
.byte 0x39, 0x14, 0x5E, 0xAA, 0x62, 0xFF, 0xC7, 0x77, 0x56, 0xC5, 0x18, 0xA2, 0xF9, 0x18, 0x1F, 0x88
.byte 0x8F, 0xD6, 0x78, 0x7C, 0x07, 0x82, 0x8C, 0x42, 0x92, 0xB5, 0xBA, 0x30, 0x99, 0x19, 0x09, 0xD3
.byte 0x2D, 0x67, 0x7D, 0x90, 0x66, 0x44, 0x08, 0xBD, 0x0A, 0x21, 0x60, 0x04, 0x39, 0x7F, 0x8D, 0xC8
.byte 0x56, 0x05, 0x45, 0x5D, 0x88, 0xD1, 0xA0, 0x1B, 0x86, 0x5A, 0x4B, 0x1F, 0x74, 0x54, 0xF3, 0xA1
.byte 0xBB, 0x70, 0x31, 0x22, 0xB4, 0x3A, 0xE0, 0xBF, 0x5B, 0x40, 0xC3, 0x94, 0xC0, 0x50, 0x5D, 0x16
.byte 0x55, 0xA2, 0x74, 0xDD, 0x74, 0x15, 0xF8, 0xFA, 0x6F, 0x44, 0x1A, 0xE3, 0x98, 0x0D, 0x85, 0x54
.byte 0x7D, 0xB7, 0x77, 0x32, 0xF1, 0x58, 0xF1, 0x4C, 0x98, 0xB4, 0xE1, 0x59, 0x05, 0x3F, 0x70, 0x5A
.byte 0xE1, 0xE4, 0x38, 0x55, 0xF9, 0x31, 0x50, 0x69, 0x75, 0x6A, 0x4D, 0x0E, 0x77, 0xD2, 0x63, 0xF4
.byte 0x89, 0xDA, 0x26, 0x7B, 0x32, 0x18, 0xC8, 0xCB, 0xCC, 0xA9, 0x25, 0xD1, 0xE8, 0x95, 0x2C, 0xCA
.byte 0x79, 0x65, 0x20, 0x73, 0x96, 0x70, 0xDC, 0x0C, 0xDA, 0x2A, 0x1B, 0x51, 0xFC, 0x7E, 0x46, 0x86
.byte 0x59, 0x6D, 0x01, 0x8C, 0x85, 0xC9, 0x57, 0x52, 0x73, 0x7D, 0x24, 0x5C, 0x12, 0x51, 0x26, 0x8C
.byte 0xB6, 0x46, 0xFF, 0x4D, 0xB7, 0xDC, 0x5A, 0x91, 0x06, 0x75, 0xE3, 0x03, 0xF4, 0x2A, 0x89, 0x4D
.byte 0x97, 0x8B, 0xD9, 0x1D, 0x54, 0x31, 0x70, 0xC8, 0xAE, 0x95, 0x24, 0xC0, 0xE6, 0x4B, 0x4C, 0x9D
.byte 0x91, 0x4C, 0xEB, 0x49, 0x29, 0x45, 0xDA, 0x2F, 0xBB, 0xBE, 0x33, 0xAF, 0xE8, 0xBC, 0xFC, 0x80
.byte 0x48, 0xD6, 0x9E, 0x9D, 0x07, 0x0F, 0x65, 0xB5, 0xA4, 0x89, 0x75, 0x8B, 0xD4, 0xC2, 0x28, 0x66
.byte 0x0E, 0x13, 0xAF, 0x38, 0x59, 0x8A, 0x67, 0x14, 0x49, 0x9B, 0xC4, 0x32, 0x57, 0xC0, 0xB3, 0x9F
.byte 0x97, 0x51, 0x3C, 0x9E, 0x60, 0xA2, 0x53, 0x05, 0x2C, 0xC9, 0x90, 0x01, 0x8C, 0xB8, 0x68, 0x9B
.byte 0xCC, 0x18, 0xD3, 0x26, 0xA3, 0x3A, 0x3A, 0xEC, 0xD5, 0xFF, 0x1E, 0x2D, 0xC0, 0xD1, 0xCD, 0x57
.byte 0x23, 0x0A, 0xF5, 0x84, 0xAD, 0x49, 0x89, 0xD9, 0x12, 0x19, 0xDA, 0x9E, 0xD2, 0x42, 0x39, 0x9E
.byte 0x5B, 0x0C, 0xC4, 0xFE, 0x47, 0xFF, 0xEA, 0x1D, 0xFE, 0x09, 0x4B, 0xBE, 0xDB, 0x19, 0x15, 0xFE
.byte 0x24, 0x0A, 0x83, 0xD1, 0x54, 0x0C, 0xAA, 0x66, 0x26, 0x85, 0x05, 0xF8, 0xC8, 0x3F, 0x96, 0x23
.byte 0x4C, 0x5B, 0x21, 0x93, 0x5A, 0x0C, 0xB1, 0x58, 0x15, 0xFD, 0x17, 0xF1, 0x16, 0x2C, 0xF0, 0x3A
.byte 0x37, 0x73, 0x0C, 0x8B, 0x7F, 0xB6, 0xF2, 0xA6, 0x3C, 0xF8, 0x9E, 0x05, 0x37, 0x34, 0x29, 0x83
.byte 0x8F, 0x4A, 0x17, 0xEA, 0x57, 0xC8, 0x42, 0x6D, 0xC5, 0x5A, 0x5E, 0xDC, 0x87, 0x4E, 0x17, 0xBF
.byte 0xC1, 0x23, 0x4B, 0x41, 0xDA, 0x3D, 0xE7, 0x16, 0x35, 0x85, 0x1B, 0x6D, 0xBA, 0x45, 0xF0, 0x4A
.byte 0x8F, 0x07, 0x34, 0xE7, 0xD0, 0x77, 0x54, 0x96, 0xD1, 0xB2, 0x72, 0x58, 0x01, 0x89, 0x17, 0xC2
.byte 0xAC, 0x62, 0x04, 0x86, 0xA0, 0xEB, 0x9D, 0xD5, 0x71, 0xB9, 0x42, 0x2C, 0xFE, 0x33, 0x76, 0x8E
.byte 0x3A, 0xAA, 0x75, 0x0B, 0x21, 0xCA, 0xA1, 0xF2, 0x7C, 0x13, 0x4A, 0x7D, 0x9D, 0x62, 0x40, 0x4A
.byte 0xC4, 0x44, 0xD1, 0x64, 0x30, 0x6E, 0x3A, 0xA2, 0x28, 0x7D, 0xCE, 0x26, 0xB0, 0x44, 0xB4, 0xEB
.byte 0xEE, 0x2A, 0xF6, 0x10, 0xF4, 0x97, 0x02, 0x71, 0xAB, 0x4D, 0xEF, 0x49, 0xAF, 0x30, 0x93, 0x74
.byte 0x75, 0x65, 0xD8, 0xA5, 0xD3, 0x13, 0x48, 0xFB, 0x90, 0x16, 0x22, 0x41, 0x5A, 0xD7, 0x2C, 0x49
.byte 0x01, 0x23, 0x59, 0xF6, 0xBB, 0x5C, 0x68, 0x67, 0xA9, 0x57, 0xB0, 0x59, 0x88, 0x44, 0xCD, 0xFD
.byte 0xA9, 0xA6, 0xA2, 0x7D, 0xB9, 0xEB, 0x79, 0x49, 0x01, 0x9B, 0x8B, 0x5C, 0x72, 0xB7, 0xA6, 0x74
.byte 0xDA, 0x00, 0x6A, 0x95, 0x5C, 0xD2, 0xFC, 0x06, 0x2A, 0xAD, 0x5F, 0xB2, 0xF2, 0x2D, 0xAF, 0x9B
.byte 0xD3, 0x52, 0x19, 0x8D, 0x3E, 0x92, 0xD7, 0x3F, 0x2D, 0x62, 0x9C, 0x9F, 0x19, 0x42, 0x13, 0xF4
.byte 0x42, 0x7E, 0x8A, 0x9F, 0x51, 0x87, 0xA6, 0x7B, 0x34, 0x06, 0x2E, 0x27, 0x33, 0xDE, 0xC2, 0x07
.byte 0x31, 0xDB, 0x94, 0x6F, 0x6D, 0x6B, 0xAF, 0x9B, 0xCD, 0x4B, 0x3B, 0xE7, 0x8D, 0x4E, 0xDB, 0xD0
.byte 0xCD, 0x65, 0x70, 0x1E, 0xED, 0x16, 0x9A, 0x22, 0x1C, 0xC8, 0x49, 0x50, 0xA7, 0x0B, 0x57, 0xD8
.byte 0xE7, 0xEB, 0x48, 0x55, 0x57, 0xF7, 0xF0, 0x24, 0x42, 0x2B, 0x0B, 0xD0, 0x7A, 0xE7, 0xA0, 0x47
.byte 0x4D, 0x11, 0x66, 0x3A, 0x27, 0x00, 0x5C, 0x44, 0xC8, 0xA5, 0x94, 0x6F, 0xB1, 0xEB, 0x48, 0x99
.byte 0xD7, 0x90, 0xEE, 0x2E, 0x87, 0xDF, 0x53, 0xCA, 0x0B, 0x5F, 0x9A, 0x86, 0x46, 0x3B, 0xCD, 0x93
.byte 0x4C, 0x34, 0xCE, 0x74, 0x34, 0x2A, 0xB8, 0xFC, 0xD0, 0x4C, 0x6C, 0x81, 0x38, 0xB5, 0x1A, 0x0F
.byte 0x45, 0x09, 0x3E, 0xCD, 0xE8, 0x92, 0x97, 0xF4, 0xF1, 0x32, 0x7A, 0x38, 0x6E, 0x48, 0xCC, 0xBB
.byte 0x7C, 0x9A, 0x2F, 0xB0, 0xC4, 0xE7, 0xAD, 0x94, 0x34, 0x1A, 0x16, 0x6C, 0xCF, 0x30, 0x7C, 0x15
.byte 0x39, 0xBB, 0xE2, 0x22, 0x4D, 0x7A, 0x16, 0x3F, 0xAD, 0x90, 0x77, 0x1B, 0xD8, 0x43, 0xD6, 0x54
.byte 0xDD, 0x06, 0x05, 0xA2, 0xEE, 0xB2, 0x37, 0x22, 0xCC, 0x4D, 0x8F, 0x9C, 0x7E, 0x0C, 0xB1, 0xB8
.byte 0xC8, 0x94, 0xDA, 0x15, 0x0E, 0xF1, 0x55, 0xBC, 0x81, 0xCC, 0xD7, 0x5A, 0x10, 0xAE, 0xAF, 0xEE
.byte 0xB4, 0xB4, 0x91, 0xA3, 0x67, 0xC9, 0xC5, 0x34, 0x17, 0x55, 0xD0, 0x95, 0x62, 0x81, 0x4E, 0x2A
.byte 0x15, 0x28, 0x40, 0x24, 0x19, 0x95, 0xE0, 0x9B, 0x62, 0xB8, 0xF6, 0x73, 0x66, 0xA5, 0x61, 0x1B
.byte 0x5A, 0xF3, 0xBE, 0xC2, 0xBC, 0x84, 0xF7, 0xD3, 0xDA, 0xC7, 0x68, 0x3C, 0x49, 0xB6, 0x67, 0x5E
.byte 0xDF, 0xA7, 0x83, 0xF9, 0x3D, 0x64, 0x95, 0x9F, 0x1C, 0x8B, 0x12, 0x83, 0x31, 0x74, 0x9F, 0x8C
.byte 0x67, 0x5E, 0x4F, 0x23, 0xE3, 0x46, 0xF7, 0xBD, 0x0D, 0x5F, 0xFA, 0x57, 0x16, 0x62, 0xB6, 0xF6
.byte 0x09, 0x39, 0xF0, 0x47, 0x9D, 0x85, 0xE7, 0xBA, 0x11, 0xF9, 0x3D, 0x43, 0x6E, 0xDC, 0xCF, 0xD6
.byte 0x3A, 0x1F, 0xFA, 0x1D, 0x65, 0xF1, 0xDB, 0x73, 0x51, 0xD6, 0xCA, 0x68, 0x38, 0x80, 0x5E, 0x41
.byte 0xBA, 0x4F, 0x89, 0x57, 0xD4, 0x70, 0x11, 0xE5, 0x69, 0x4F, 0x28, 0xD8, 0x2C, 0xF8, 0xAF, 0x66
.byte 0x18, 0xA9, 0x84, 0x7D, 0x9B, 0x60, 0xF1, 0xEC, 0x36, 0xBB, 0x55, 0x6E, 0x3C, 0xB4, 0xB0, 0xF6
.byte 0x03, 0x39, 0x4E, 0xD7, 0xA9, 0x60, 0xBD, 0x13, 0xAF, 0xE6, 0xEB, 0xDB, 0xDF, 0x9B, 0x42, 0xF7
.byte 0x44, 0xC7, 0x75, 0xDF, 0x27, 0x66, 0xCC, 0x5D, 0x22, 0x22, 0xCC, 0x5E, 0xD6, 0x7C, 0x55, 0xD9
.byte 0xB5, 0xA4, 0xB1, 0x5F, 0x04, 0x6F, 0x72, 0xB4, 0x56, 0x5E, 0x90, 0x35, 0xF9, 0xD3, 0x2D, 0x3E
.byte 0x9B, 0xA3, 0x1D, 0xC2, 0x09, 0xEA, 0x20, 0x2C, 0x0C, 0xED, 0x8B, 0xE3, 0x69, 0xE0, 0xBD, 0x1F
.byte 0x85, 0x6E, 0x7E, 0x89, 0xDE, 0xF0, 0x3E, 0x34, 0x4E, 0xCF, 0x6A, 0x48, 0xA2, 0x97, 0x86, 0x3D
.byte 0x3A, 0xA4, 0x00, 0x44, 0x8F, 0x21, 0x71, 0x9B, 0x0E, 0xFC, 0x7F, 0x77, 0xDD, 0x3C, 0x97, 0x62
.byte 0xAB, 0x15, 0xEC, 0x89, 0x06, 0x2A, 0xBD, 0x55, 0xF9, 0x27, 0x9D, 0x9C, 0xBF, 0x23, 0xDA, 0xFA
.byte 0xC7, 0xDA, 0x3F, 0x56, 0xFB, 0xB0, 0xF2, 0x09, 0xAC, 0x72, 0x81, 0x89, 0xAE, 0x18, 0xEC, 0x59
.byte 0x2D, 0xD8, 0xE3, 0x33, 0x03, 0xA0, 0x89, 0xFD, 0xC8, 0x26, 0x99, 0x88, 0x4A, 0x74, 0x82, 0x12
.byte 0x4E, 0xC2, 0x68, 0x4A, 0x72, 0x5B, 0x53, 0x1E, 0xCE, 0xD4, 0xA8, 0x7C, 0xED, 0x94, 0xD6, 0x1A
.byte 0x6D, 0xB9, 0x4E, 0x71, 0x5A, 0xD7, 0x6E, 0x22, 0xFE, 0x08, 0xAB, 0x48, 0x7C, 0x2E, 0x5A, 0xCA
.byte 0xF0, 0xC3, 0x14, 0x62, 0x1F, 0x68, 0x81, 0xED, 0x3D, 0x29, 0x69, 0x2A, 0xBE, 0x40, 0x45, 0x2C
.byte 0xF9, 0x94, 0x9D, 0x53, 0x6C, 0x0B, 0x76, 0x6A, 0x13, 0x21, 0xB3, 0x90, 0x50, 0x0D, 0x5A, 0x40
.byte 0xD1, 0x6F, 0xA2, 0xF0, 0xD8, 0x23, 0xDD, 0x15, 0x4D, 0x47, 0x40, 0x0C, 0x87, 0x85, 0x38, 0x81
.byte 0x1A, 0xD5, 0xD4, 0x86, 0xE1, 0x4B, 0xF1, 0xF4, 0x6D, 0xA4, 0x85, 0xBD, 0xB2, 0xE0, 0xFD, 0x83
.byte 0x4F, 0xA0, 0x73, 0x28, 0xC3, 0x51, 0x3D, 0x11, 0x98, 0x7E, 0x1D, 0x20, 0x04, 0x55, 0xA1, 0x1E
.byte 0x2B, 0x76, 0xA5, 0x0C, 0xC1, 0x96, 0x01, 0x2E, 0x3B, 0x86, 0xEC, 0xED, 0x66, 0xE9, 0x70, 0xB6
.byte 0x8A, 0xE4, 0xDE, 0x4E, 0x35, 0x1C, 0x5F, 0xCE, 0x9A, 0x7C, 0xEE, 0x9E, 0xD2, 0x8F, 0xBC, 0xFD
.byte 0x05, 0x62, 0x09, 0xC7, 0xF8, 0x0A, 0xF6, 0x34, 0x90, 0xE2, 0x21, 0xF7, 0xCC, 0x92, 0xAD, 0x56
.byte 0x77, 0x8B, 0xA4, 0xAC, 0xA7, 0x03, 0x7A, 0x42, 0x80, 0x69, 0xE0, 0x52, 0xF8, 0x9D, 0x50, 0xFE
.byte 0xFF, 0x59, 0xC5, 0xF8, 0x64, 0xBB, 0x2C, 0xF5, 0x9E, 0x4E, 0xEC, 0x6A, 0xE0, 0x99, 0xC1, 0x57
.byte 0x25, 0x65, 0x04, 0xCD, 0x69, 0x7F, 0x0F, 0xEA, 0xE8, 0xEF, 0x3D, 0xE1, 0x8D, 0x8D, 0xE0, 0x8C
.byte 0xE6, 0xA5, 0x85, 0x4B, 0x61, 0xB1, 0x40, 0xFF, 0xFF, 0x2C, 0x6A, 0xE0, 0xC6, 0x2B, 0x38, 0xEB
.byte 0x91, 0x3C, 0xB8, 0xFA, 0xBC, 0xC7, 0xE5, 0xA4, 0xB7, 0x22, 0x86, 0x44, 0xAF, 0x66, 0xD1, 0x96
.byte 0x0C, 0x56, 0xE1, 0x6E, 0x08, 0x21, 0x6D, 0x08, 0x4E, 0xD8, 0xE8, 0x14, 0x03, 0x20, 0x00, 0x94
.byte 0x5D, 0xB8, 0x8F, 0x19, 0x80, 0x75, 0xBE, 0x38, 0x97, 0x45, 0x7D, 0x46, 0xAC, 0x4F, 0xDD, 0xB8
.byte 0xA5, 0xBE, 0x26, 0xAE, 0xE0, 0x94, 0xB6, 0x2F, 0x6C, 0x9F, 0x43, 0x70, 0xC0, 0x44, 0x05, 0x1D
.byte 0xFD, 0x95, 0x37, 0x7E, 0x0A, 0xF6, 0xB6, 0xA1, 0x3B, 0x33, 0xE8, 0xE7, 0x82, 0xC5, 0xA0, 0x28
.byte 0x83, 0xC7, 0xD7, 0x64, 0x5C, 0x8D, 0x93, 0xC9, 0x2C, 0xD7, 0x3A, 0xED, 0x1B, 0x3F, 0x0A, 0x19
.byte 0xD4, 0x42, 0x97, 0xDF, 0x38, 0x4D, 0x80, 0x74, 0x81, 0x69, 0x5C, 0x04, 0x2E, 0xFD, 0x2D, 0xB2
.byte 0xC4, 0x04, 0x16, 0x21, 0x92, 0xAA, 0xEB, 0xBF, 0x81, 0x25, 0xAC, 0x9D, 0x64, 0xB6, 0xB6, 0x39
.byte 0xF9, 0x4E, 0x19, 0x31, 0x9B, 0x99, 0xA6, 0x1D, 0x03, 0x02, 0x21, 0x31, 0x00, 0x4E, 0xE4, 0xC5
.byte 0x52, 0xFA, 0xE6, 0xE4, 0xA5, 0xD1, 0xA3, 0x26, 0xF6, 0x4F, 0xC4, 0x5B, 0x06, 0x7B, 0x95, 0x00
.byte 0xC9, 0xAE, 0x31, 0x65, 0x48, 0xD8, 0x82, 0x4B, 0xDB, 0xA3, 0x7D, 0xDB, 0xF2, 0x61, 0xA0, 0x45
.byte 0x5C, 0x86, 0x2A, 0x01, 0x58, 0xCD, 0x28, 0x4F, 0x1D, 0xEC, 0xAA, 0x24, 0x68, 0x40, 0x24, 0x31
.byte 0xEE, 0x56, 0x96, 0x36, 0x2E, 0x19, 0x82, 0x0A, 0xBD, 0xFF, 0xE5, 0xAF, 0x60, 0x85, 0xF4, 0xBC
.byte 0x0C, 0x1E, 0xBD, 0x64, 0xEC, 0xE6, 0xB4, 0x0A, 0xD2, 0x5E, 0x2F, 0x3B, 0x9E, 0x53, 0x6C, 0x8D
.byte 0xAA, 0x03, 0xC4, 0xD9, 0x1C, 0x46, 0xE3, 0xDA, 0x45, 0xC9, 0x89, 0xA6, 0x4E, 0x7E, 0x62, 0x5B
.byte 0x9D, 0x20, 0xC0, 0x8A, 0x06, 0x74, 0x94, 0xD9, 0xD3, 0xC4, 0x14, 0x72, 0x18, 0x81, 0xFF, 0xC2
.byte 0x85, 0xC3, 0x9C, 0xA2, 0x0A, 0x80, 0x7C, 0x4F, 0x49, 0x06, 0xF6, 0x98, 0x84, 0x58, 0xF3, 0x22
.byte 0x79, 0xB4, 0xAC, 0x80, 0x28, 0x41, 0x5A, 0xFC, 0x05, 0x6F, 0x6E, 0x1D, 0xF0, 0x6E, 0xE0, 0x76
.byte 0x32, 0x7C, 0x18, 0x3C, 0xFC, 0x95, 0x8C, 0x46, 0x9B, 0x82, 0xDE, 0x20, 0xDB, 0xD2, 0x42, 0x55
.byte 0x86, 0xEE, 0xD6, 0xAE, 0x2F, 0x30, 0xAB, 0x34, 0x9F, 0x19, 0x52, 0x90, 0x88, 0x32, 0x07, 0xBA
.byte 0xAF, 0x1F, 0xF7, 0xAC, 0xB5, 0x84, 0xF2, 0x50, 0x06, 0xD0, 0x70, 0xE2, 0xA2, 0xB2, 0x38, 0x28
.byte 0xA1, 0x0E, 0xD7, 0xD0, 0x3F, 0x82, 0x05, 0xDE, 0x9C, 0x58, 0x6F, 0x24, 0x8B, 0x76, 0xDE, 0x3A
.byte 0x96, 0xD5, 0xE6, 0x4B, 0x59, 0xD8, 0x9B, 0x60, 0xA8, 0x0C, 0x43, 0x4B, 0xBE, 0x7B, 0x73, 0x60
.byte 0x8A, 0x4B, 0x31, 0xC9, 0xCD, 0x36, 0xA8, 0x69, 0x8F, 0x17, 0x8D, 0x1A, 0x8E, 0x6C, 0x54, 0x24
.byte 0x42, 0x3A, 0x6F, 0x9C, 0x13, 0x0B, 0xFD, 0xBC, 0x17, 0x40, 0x07, 0xD6, 0xBC, 0x7B, 0x36, 0x46
.byte 0xC7, 0x67, 0x10, 0x94, 0x9E, 0xB8, 0xFE, 0x2D, 0xCF, 0x8C, 0x47, 0x5D, 0xF8, 0x9B, 0x81, 0x3B
.byte 0xD6, 0xF1, 0xD7, 0xEA, 0xFC, 0xD4, 0xA6, 0x14, 0x15, 0xAE, 0xEA, 0xD2, 0x2A, 0x21, 0x18, 0xF1
.byte 0x89, 0x28, 0x86, 0x27, 0xE0, 0x84, 0x55, 0xB0, 0x11, 0x9C, 0x0D, 0x0A, 0x38, 0x8F, 0x45, 0x0F
.byte 0x81, 0x1D, 0xF9, 0x7D, 0xF2, 0xA0, 0x91, 0x07, 0x4F, 0x7C, 0xD9, 0x79, 0x9E, 0xF2, 0x6A, 0x27
.byte 0x1B, 0xF0, 0x4F, 0xFB, 0x75, 0xA4, 0xAC, 0x86, 0x41, 0xB9, 0x91, 0x7A, 0x49, 0xD6, 0x89, 0xCA
.byte 0xF3, 0x83, 0x48, 0xE5, 0x24, 0xDA, 0xED, 0x73, 0x56, 0xC7, 0xEC, 0xF5, 0xB9, 0x57, 0x1C, 0xD4
.byte 0x48, 0x6B, 0xD0, 0xBE, 0x10, 0x7C, 0x45, 0x51, 0x36, 0xD6, 0xCB, 0x80, 0xAD, 0x55, 0x4A, 0xA0
.byte 0xD9, 0x93, 0x86, 0xFD, 0x6D, 0x74, 0x71, 0xC4, 0x3B, 0x5D, 0xB9, 0xF4, 0xB5, 0xD5, 0xC9, 0xFE
.byte 0x41, 0x99, 0xBC, 0x51, 0x16, 0x01, 0xA3, 0x4D, 0xD8, 0x6E, 0xCD, 0x85, 0xC3, 0x17, 0x26, 0x9D
.byte 0xAB, 0xAC, 0x9A, 0x18, 0x21, 0x0B, 0xDC, 0x5C, 0x69, 0x96, 0x51, 0x1E, 0x6C, 0x1B, 0x1C, 0xAD
.byte 0xB5, 0xD9, 0xFF, 0xCB, 0xDB, 0xA2, 0x18, 0xB3, 0x11, 0xE5, 0x38, 0xD4, 0xFD, 0x5E, 0x71, 0xA8
.byte 0x0B, 0x0C, 0xC1, 0x2C, 0x18, 0x9E, 0x89, 0x81, 0x34, 0xDA, 0xA0, 0xA0, 0xF5, 0xBD, 0x4E, 0xAB
.byte 0x96, 0x4D, 0x76, 0x71, 0xF0, 0x8F, 0x24, 0x01, 0x74, 0x5D, 0xD5, 0x72, 0xBB, 0x47, 0x1B, 0xC7
.byte 0x54, 0xDC, 0xF3, 0x6C, 0x7A, 0x7C, 0xED, 0xAE, 0x57, 0x8E, 0x4F, 0x4D, 0x4B, 0x9D, 0xF8, 0xE2
.byte 0xEA, 0x6F, 0x53, 0xDA, 0xFE, 0x78, 0xDB, 0x73, 0xD6, 0xB1, 0xE5, 0x92, 0xF9, 0x00, 0x59, 0x4E
.byte 0xDD, 0x4C, 0xBA, 0x57, 0xC9, 0xA8, 0x06, 0x20, 0x36, 0x55, 0x6E, 0x81, 0xF2, 0x67, 0x64, 0xDD
.byte 0xD6, 0xB8, 0xB8, 0xD4, 0x30, 0x94, 0x47, 0x07, 0x46, 0x2D, 0x99, 0x40, 0x2D, 0xF2, 0x8E, 0x0B
.byte 0x3E, 0x49, 0x62, 0x08, 0xF1, 0x69, 0x29, 0x27, 0xBE, 0x97, 0xA9, 0xB1, 0xFE, 0x0D, 0x8F, 0xD5
.byte 0xC5, 0x48, 0xA9, 0xF6, 0xDD, 0xF1, 0xFE, 0x24, 0x1E, 0x97, 0x64, 0x4C, 0x89, 0xF3, 0x57, 0xC8
.byte 0x3C, 0xBA, 0xD1, 0x2D, 0x23, 0xFA, 0x55, 0xE2, 0x92, 0xFF, 0x94, 0x91, 0x0D, 0x24, 0x66, 0xD3
.byte 0x6C, 0x10, 0xCA, 0x4A, 0x01, 0xC8, 0x6E, 0x1F, 0x60, 0xD2, 0x6B, 0xE9, 0xC5, 0xC2, 0xB2, 0x01
.byte 0x7C, 0x83, 0x2F, 0xA0, 0x7D, 0x85, 0x82, 0x10, 0x85, 0x16, 0xA1, 0x92, 0x3A, 0x08, 0x66, 0xA7
.byte 0x18, 0x30, 0xF1, 0x19, 0xF9, 0x5F, 0x38, 0x59, 0x32, 0xA3, 0x43, 0xF7, 0x66, 0xF5, 0xF9, 0xE2
.byte 0x78, 0x29, 0x83, 0xF6, 0xAF, 0x05, 0x06, 0x34, 0x1C, 0xA8, 0xC6, 0x57, 0xB0, 0x2D, 0xFF, 0xC8
.byte 0x5D, 0xF0, 0xE1, 0x57, 0x50, 0x19, 0xB0, 0x82, 0xBD, 0xF3, 0x7A, 0x23, 0xE9, 0x74, 0x06, 0x62
.byte 0x9D, 0x89, 0x59, 0x4D, 0x8F, 0x60, 0x81, 0xAC, 0x08, 0x48, 0x03, 0xB9, 0x75, 0x02, 0x81, 0xD2
.byte 0xF3, 0x63, 0x2A, 0x44, 0x7D, 0xDB, 0xC6, 0x3B, 0xCF, 0x41, 0x5E, 0xB8, 0xB5, 0x65, 0x1B, 0x53
.byte 0xEF, 0x74, 0xA0, 0x7F, 0xD4, 0x22, 0x2B, 0xDD, 0x6A, 0x2F, 0x96, 0xDF, 0x32, 0x18, 0xB2, 0x25
.byte 0x7B, 0xDC, 0x6A, 0xF9, 0xB7, 0x31, 0x34, 0x86, 0x72, 0x93, 0x3F, 0x28, 0xF9, 0x5A, 0x7C, 0xE8
.byte 0xCE, 0x1D, 0x67, 0xA3, 0x3F, 0x93, 0x80, 0xA9, 0xC2, 0x17, 0x88, 0xF4, 0x2F, 0x3A, 0x1A, 0xAB
.byte 0x17, 0x84, 0xA4, 0xCF, 0xB5, 0xD9, 0x56, 0x28, 0x6C, 0x95, 0x50, 0x65, 0xF0, 0xCD, 0x4E, 0xBF
.byte 0xEA, 0xB6, 0x62, 0x29, 0x49, 0xE3, 0xD3, 0x0B, 0xFA, 0x5C, 0xFF, 0x2A, 0x97, 0x1A, 0xD5, 0xAE
.byte 0x9E, 0x7A, 0x7D, 0x53, 0x54, 0xD4, 0x7B, 0xC0, 0x69, 0xCC, 0x26, 0x59, 0x99, 0x74, 0x18, 0x83
.byte 0x2A, 0x7B, 0xAD, 0x74, 0x5E, 0x81, 0x7F, 0x59, 0xDD, 0x7F, 0x83, 0x74, 0x99, 0x59, 0x23, 0x38
.byte 0xD4, 0xA1, 0x8B, 0x28, 0x75, 0x07, 0xE9, 0xDF, 0xD4, 0x10, 0x38, 0x6D, 0x84, 0x51, 0xF1, 0xAF
.byte 0xCC, 0x9E, 0x23, 0x2B, 0x20, 0xA3, 0x84, 0xFD, 0x23, 0x08, 0x72, 0xBD, 0x61, 0x95, 0xF5, 0x36
.byte 0x37, 0x81, 0x5F, 0xAC, 0x89, 0x48, 0x8B, 0x5D, 0x58, 0xC4, 0xCA, 0xDD, 0x15, 0xBB, 0x8D, 0xE2
.byte 0x5A, 0xB1, 0x0D, 0x7A, 0x54, 0x92, 0x78, 0x78, 0x9A, 0xEA, 0x35, 0xFC, 0x80, 0x2B, 0x32, 0xB7
.byte 0xAC, 0x91, 0x64, 0x35, 0xDA, 0xF0, 0x93, 0x32, 0xB4, 0x5D, 0x10, 0xCA, 0x19, 0x9D, 0xAD, 0x74
.byte 0x4E, 0xBB, 0xEE, 0xA3, 0x4D, 0x67, 0x1C, 0xE8, 0x52, 0x51, 0xE4, 0xD2, 0x7D, 0x16, 0x8A, 0x2A
.byte 0xA8, 0xEF, 0x60, 0x82, 0xDF, 0xF3, 0xB5, 0x94, 0x50, 0xC5, 0x5F, 0x6A, 0x63, 0x0C, 0xDE, 0xB1
.byte 0xC7, 0xCC, 0x55, 0x15, 0x34, 0x71, 0xFD, 0x86, 0xC3, 0xE1, 0x59, 0x40, 0xF8, 0xE4, 0x6B, 0xA1
.byte 0xD3, 0xCB, 0x24, 0xB3, 0xBE, 0xD9, 0x48, 0x0F, 0x9F, 0xA7, 0x79, 0x02, 0xB4, 0x57, 0xB4, 0x7C
.byte 0x24, 0x09, 0x91, 0x58, 0x7B, 0x8F, 0xDF, 0x3F, 0x71, 0x38, 0x80, 0x69, 0x1C, 0xEB, 0x0B, 0xF0
.byte 0xB6, 0x2F, 0xA3, 0x74, 0x09, 0xEB, 0x83, 0xA8, 0x92, 0xFD, 0xAB, 0x47, 0x54, 0x5F, 0xC3, 0x78
.byte 0x69, 0x54, 0xD0, 0xE4, 0xE4, 0xAF, 0x23, 0x55, 0xE8, 0xA3, 0xBF, 0x04, 0x8E, 0xCA, 0xF5, 0x45
.byte 0xFA, 0x98, 0xB9, 0x03, 0x84, 0x3D, 0xAB, 0x17, 0x3A, 0x56, 0x5E, 0x8F, 0xB6, 0x21, 0x07, 0x1F
.byte 0x76, 0xD8, 0x04, 0x5A, 0x88, 0x27, 0xAF, 0x70, 0xCB, 0x6F, 0x75, 0x5A, 0x39, 0x6A, 0x9F, 0x33
.byte 0x03, 0x59, 0x37, 0x87, 0x96, 0xE3, 0x9E, 0xD1, 0x3A, 0xFC, 0x60, 0xF0, 0x1E, 0x68, 0x10, 0x94
.byte 0x40, 0x14, 0xEF, 0xC9, 0x3B, 0x9F, 0x39, 0x07, 0x0E, 0xAE, 0x61, 0x48, 0x19, 0x00, 0x7C, 0x1C
.byte 0x59, 0xB3, 0xA3, 0xF0, 0x97, 0x42, 0xC2, 0xD1, 0x3E, 0x23, 0xC1, 0x5D, 0x8B, 0xD2, 0xF2, 0xCC
.byte 0xE6, 0xE1, 0x95, 0x22, 0x81, 0xCF, 0x29, 0x90, 0x7E, 0x8A, 0xD8, 0x97, 0x8A, 0x55, 0xB4, 0xE4
.byte 0x09, 0x57, 0xD4, 0xA0, 0x9A, 0x97, 0x71, 0xD8, 0xBA, 0x33, 0x36, 0x46, 0x05, 0x28, 0x12, 0xEB
.byte 0x09, 0xA8, 0x0D, 0x8B, 0x77, 0x36, 0x1B, 0xF5, 0xC1, 0xF3, 0x8C, 0x4B, 0x49, 0x41, 0x30, 0x52
.byte 0x99, 0x05, 0xF2, 0x33, 0x9C, 0x64, 0x0C, 0x56, 0x98, 0x42, 0x9C, 0x9D, 0x6A, 0xAF, 0x89, 0x74
.byte 0x57, 0x97, 0xFF, 0xCF, 0xCE, 0x1A, 0xC4, 0x8F, 0x0E, 0x51, 0xDB, 0x57, 0x92, 0x0B, 0xA9, 0x2B
.byte 0x10, 0x9C, 0x5F, 0xAD, 0x01, 0x6B, 0x03, 0x99, 0xAD, 0xA0, 0x36, 0x17, 0x50, 0xC0, 0x8C, 0xA8
.byte 0x57, 0x8B, 0x77, 0x26, 0xA5, 0x3C, 0xB5, 0xB3, 0x8D, 0x91, 0x0B, 0x20, 0x9C, 0xB5, 0x4C, 0xAD
.byte 0x51, 0xAB, 0x5B, 0x52, 0x17, 0x5E, 0xEC, 0xC4, 0xFF, 0x23, 0xDC, 0x50, 0xE3, 0x68, 0xF8, 0x3B
.byte 0xF3, 0x70, 0x61, 0x99, 0xAC, 0x16, 0x4C, 0x39, 0xA8, 0x58, 0x5A, 0x45, 0x0D, 0xA6, 0xF2, 0x5E
.byte 0x52, 0x4D, 0xB1, 0x69, 0xAC, 0x9D, 0x2E, 0xAC, 0xC0, 0x0A, 0xFC, 0xA4, 0x73, 0xF5, 0xDF, 0x67
.byte 0x65, 0x41, 0x00, 0x11, 0x58, 0x4D, 0x4B, 0x00, 0xA5, 0xA5, 0x45, 0xB2, 0x4C, 0x38, 0x11, 0x9E
.byte 0x86, 0xC3, 0x07, 0x33, 0x61, 0x35, 0xDF, 0x22, 0x40, 0xDC, 0xC6, 0xB4, 0xD2, 0xA6, 0x1B, 0x37
.byte 0xE7, 0x1C, 0x49, 0x40, 0x69, 0x94, 0x40, 0x0F, 0x39, 0x85, 0xC2, 0x85, 0xBD, 0xD4, 0x24, 0x44
.byte 0x97, 0x2B, 0x77, 0xF8, 0x61, 0x56, 0x1B, 0xA2, 0x33, 0xE2, 0x56, 0x05, 0x89, 0x71, 0x3D, 0x71
.byte 0x8D, 0x86, 0xB1, 0xF7, 0x1A, 0xF1, 0x06, 0x54, 0x77, 0xC9, 0xDA, 0x34, 0x9D, 0xFE, 0x79, 0x34
.byte 0x2A, 0xF0, 0x2D, 0x8C, 0x47, 0x49, 0x2E, 0x7A, 0x2B, 0x84, 0x80, 0xB4, 0xF5, 0xBD, 0x25, 0x83
.byte 0x43, 0xD6, 0x7A, 0x5E, 0xC8, 0x81, 0xB2, 0x3F, 0x4A, 0x8C, 0x74, 0xE8, 0x8B, 0xED, 0x1C, 0xB5
.byte 0xDD, 0x4A, 0x41, 0x24, 0x93, 0x70, 0x9F, 0xBF, 0xF4, 0x20, 0x73, 0xEA, 0xDD, 0x99, 0x6D, 0x21
.byte 0x6F, 0xE8, 0x7F, 0x37, 0x69, 0x32, 0x77, 0xB4, 0xBE, 0xEB, 0x9D, 0x4A, 0xD8, 0xB9, 0x00, 0xB6
.byte 0x04, 0x42, 0xDB, 0x98, 0xB2, 0x7B, 0x57, 0xA6, 0x9B, 0xCA, 0x90, 0x78, 0x63, 0xFE, 0x9A, 0xD3
.byte 0xE6, 0x19, 0x0B, 0x50, 0x4C, 0x83, 0x05, 0x0B, 0x6E, 0xA2, 0x55, 0x47, 0x5C, 0x55, 0xFE, 0x60
.byte 0x97, 0xD9, 0xF8, 0x4A, 0x54, 0x50, 0xF0, 0xEF, 0x1B, 0x81, 0x68, 0x7E, 0x7F, 0x02, 0x52, 0x65
.byte 0x1C, 0x5E, 0xB5, 0x68, 0xE1, 0xBA, 0x73, 0x50, 0x5C, 0xC9, 0x97, 0xB8, 0x1E, 0x96, 0x19, 0xB6
.byte 0x6F, 0x12, 0x00, 0xC4, 0x62, 0xF1, 0xB4, 0x7D, 0x72, 0x1D, 0xFC, 0xF2, 0x20, 0x4F, 0x57, 0x3C
.byte 0xAD, 0x0D, 0xA5, 0x8F, 0xC8, 0x19, 0xDF, 0x24, 0xE3, 0x77, 0xDD, 0x02, 0x0D, 0xF7, 0xB8, 0x7D
.byte 0x09, 0xB9, 0x41, 0x6C, 0xAB, 0xF6, 0xEA, 0x1D, 0x13, 0xE6, 0x10, 0x33, 0x36, 0x67, 0x70, 0xE4
.byte 0x75, 0x16, 0x73, 0x3D, 0x30, 0x53, 0x62, 0x13, 0xCA, 0x40, 0x15, 0xD8, 0x37, 0xCE, 0x55, 0x41
.byte 0x88, 0x97, 0xAD, 0x33, 0x8D, 0x98, 0x51, 0xA1, 0x7F, 0x61, 0xD5, 0xB5, 0xC9, 0x45, 0x99, 0x3E
.byte 0x5C, 0x0C, 0x7C, 0x8C, 0x60, 0xDE, 0xA0, 0x2A, 0x1E, 0xB6, 0x02, 0x55, 0x84, 0x57, 0x97, 0x0D
.byte 0xEF, 0x44, 0x40, 0x7C, 0xDD, 0x91, 0x1E, 0x5C, 0xF3, 0xF3, 0x11, 0xBC, 0x39, 0xAA, 0xFB, 0x95
.byte 0xB7, 0x77, 0x22, 0x17, 0x55, 0xC2, 0x42, 0x74, 0x79, 0x44, 0xC9, 0xFE, 0x9C, 0x61, 0x0B, 0x8B
.byte 0xA6, 0x4B, 0x08, 0x83, 0xDD, 0x27, 0xDF, 0xD1, 0x1A, 0xF0, 0x8E, 0x53, 0x9B, 0x89, 0xE9, 0x53
.byte 0x00, 0x0B, 0x6B, 0x56, 0xCE, 0xAD, 0xCA, 0x47, 0xF2, 0x94, 0x45, 0x8E, 0xF5, 0x50, 0x1A, 0x9B
.byte 0x9C, 0x23, 0x1E, 0x7A, 0x4A, 0xFE, 0x4B, 0x65, 0xEE, 0xD9, 0xB8, 0x8A, 0x63, 0xA2, 0xDD, 0x63
.byte 0xAD, 0x48, 0xBA, 0x7B, 0xF5, 0x85, 0xC3, 0xE7, 0x19, 0x08, 0x76, 0x0F, 0x59, 0x91, 0xAB, 0xF5
.byte 0xB4, 0xC9, 0x70, 0xFF, 0xC8, 0xBC, 0x64, 0xB6, 0x95, 0x1D, 0x41, 0xF9, 0xBF, 0x1E, 0x5C, 0x6D
.byte 0x67, 0x17, 0xE9, 0x5D, 0x9C, 0xAC, 0x45, 0xB6, 0xB4, 0xBB, 0xC5, 0x0E, 0x4D, 0x70, 0x04, 0x02
.byte 0x3A, 0x74, 0x01, 0x02, 0x30, 0x66, 0xB9, 0xC6, 0x83, 0xFA, 0xBF, 0x43, 0x19, 0x1C, 0xB0, 0x81
.byte 0x34, 0x9A, 0xDE, 0xD0, 0x46, 0x23, 0x86, 0xFB, 0xDF, 0x4C, 0x09, 0x2D, 0xBC, 0x0D, 0x2F, 0xF7
.byte 0x82, 0x30, 0xFA, 0xB2, 0x96, 0xB3, 0x79, 0x1A, 0xAE, 0x39, 0x5D, 0xC8, 0x55, 0x0E, 0x49, 0x89
.byte 0xA8, 0x28, 0x5A, 0xEF, 0x4C, 0xE1, 0xEA, 0x2B, 0x2D, 0xF4, 0x58, 0xEA, 0x02, 0x88, 0xE1, 0x84
.byte 0xB8, 0xDB, 0x37, 0x4F, 0x8F, 0xB0, 0x69, 0x3E, 0xE9, 0xC7, 0x07, 0x3F, 0xD5, 0x51, 0xC9, 0x7E
.byte 0x79, 0x23, 0x6D, 0xC5, 0x04, 0x58, 0xF1, 0x31, 0x4D, 0x4A, 0x1C, 0x4F, 0xD2, 0xFE, 0xD3, 0x8B
.byte 0xD9, 0x0B, 0xDA, 0x69, 0xBC, 0x43, 0xA8, 0xA5, 0x0A, 0xAF, 0xE5, 0xE0, 0x00, 0xAE, 0x5E, 0x7A
.byte 0xD2, 0xCC, 0x40, 0xD6, 0x25, 0x31, 0x08, 0x72, 0x7C, 0x25, 0xC1, 0x4E, 0x23, 0x95, 0xD9, 0xFD
.byte 0xA0, 0xB4, 0x66, 0x5C, 0xF7, 0x0F, 0x02, 0x02, 0xBF, 0xE7, 0xE3, 0xC0, 0x96, 0x41, 0x3A, 0x69
.byte 0x0E, 0x7A, 0x3F, 0x33, 0xAC, 0x48, 0xA5, 0x28, 0x6D, 0x66, 0x77, 0x91, 0xFC, 0x51, 0x8E, 0x9C
.byte 0x05, 0xF5, 0xF8, 0xFD, 0x04, 0xFB, 0x00, 0xC4, 0xE3, 0xE3, 0x84, 0x79, 0x25, 0xBF, 0xE2, 0x33
.byte 0x39, 0x22, 0x66, 0xE6, 0x6B, 0x0C, 0x0E, 0xD9, 0x73, 0x86, 0x6A, 0x6F, 0xD7, 0xF8, 0x0B, 0xDD
.byte 0xEE, 0x04, 0xDA, 0xF2, 0xFF, 0xDB, 0xB6, 0xE2, 0xBE, 0x3B, 0x5C, 0xE3, 0xFA, 0x3F, 0x17, 0x33
.byte 0x62, 0x7E, 0x1A, 0xCD, 0x8A, 0x29, 0xA7, 0xFE, 0xAF, 0x11, 0x6D, 0x87, 0x0A, 0x79, 0x64, 0xF8
.byte 0x7D, 0x3F, 0xEB, 0x7D, 0x1A, 0xA2, 0x60, 0xD9, 0xDD, 0xBC, 0xBC, 0xD7, 0xFC, 0xD4, 0x0B, 0x5E
.byte 0x52, 0x25, 0x2C, 0xDC, 0x4F, 0xD4, 0xDA, 0xFE, 0xE6, 0x48, 0x85, 0xF1, 0xC1, 0xEA, 0xEA, 0x3F
.byte 0x2A, 0xD5, 0xBC, 0x44, 0x78, 0x1C, 0x1E, 0x55, 0xD9, 0xDB, 0x2D, 0xD6, 0xAF, 0x38, 0x35, 0x01
.byte 0x5E, 0x62, 0xDE, 0xAD, 0x36, 0xB9, 0xAC, 0x1D, 0x01, 0x32, 0x0E, 0xC2, 0x1C, 0xF8, 0x01, 0x46
.byte 0xCD, 0xBE, 0x8B, 0x45, 0xDB, 0xA9, 0x9B, 0xB4, 0x84, 0xC8, 0x8B, 0x34, 0x01, 0xC0, 0x35, 0x5F
.byte 0x22, 0x13, 0x0D, 0x59, 0xCC, 0xB9, 0x76, 0xCD, 0xEC, 0x84, 0x90, 0x09, 0x7C, 0x92, 0x50, 0x4A
.byte 0x50, 0xDB, 0x90, 0x2B, 0x85, 0x2C, 0xE0, 0x0A, 0xF4, 0x6B, 0x3E, 0xF6, 0x2C, 0x74, 0x56, 0x4E
.byte 0x87, 0x63, 0xA8, 0x54, 0x1D, 0x1E, 0x21, 0x0A, 0xA2, 0xB2, 0x13, 0x1F, 0x44, 0x63, 0x6A, 0x95
.byte 0x3F, 0xFB, 0xC1, 0xC4, 0x27, 0xA1, 0xCF, 0x1C, 0x0D, 0x0E, 0x12, 0x39, 0x82, 0x68, 0x88, 0x0A
.byte 0xCC, 0x30, 0x5E, 0xEA, 0x4F, 0x80, 0xF4, 0xF2, 0x32, 0x07, 0x11, 0x77, 0x6A, 0x7C, 0x0D, 0xA9
.byte 0x77, 0xCE, 0x6E, 0x9E, 0x70, 0x3E, 0xBB, 0x7E, 0x4C, 0xCD, 0xB8, 0xCF, 0x36, 0x40, 0xD9, 0x03
.byte 0x71, 0x38, 0xED, 0xC0, 0xB8, 0xE2, 0xB2, 0xEB, 0xE9, 0xC4, 0x63, 0x54, 0x41, 0x70, 0xFE, 0xB8
.byte 0x3F, 0x6D, 0x57, 0xAF, 0xAB, 0x12, 0x2D, 0xF8, 0xE0, 0xE5, 0xC8, 0x16, 0x26, 0xA1, 0x1A, 0x98
.byte 0xDA, 0x07, 0x58, 0x92, 0xE9, 0x0B, 0x7E, 0xD3, 0xD0, 0xE1, 0x28, 0x11, 0x52, 0x26, 0xCA, 0x91
.byte 0x93, 0x21, 0x41, 0x3F, 0x34, 0x6E, 0x37, 0x14, 0x54, 0xFF, 0x2B, 0x7B, 0xA1, 0x45, 0x13, 0x7B
.byte 0x4D, 0x6C, 0x0E, 0x37, 0x77, 0x8D, 0x0A, 0x47, 0x6F, 0x32, 0x59, 0xC1, 0x59, 0x23, 0x53, 0xEC
.byte 0x44, 0x94, 0x2C, 0x79, 0x02, 0x63, 0x8E, 0x57, 0x63, 0xB9, 0xD3, 0x04, 0xFF, 0xE6, 0x80, 0x4C
.byte 0x52, 0x8F, 0x83, 0xCA, 0x1C, 0x8E, 0x12, 0x8B, 0xC1, 0x6B, 0x4D, 0x1A, 0x8E, 0xA0, 0x07, 0xD3
.byte 0x34, 0x33, 0x4D, 0x37, 0x97, 0xDB, 0x8F, 0xFA, 0x95, 0x62, 0xFF, 0x94, 0x48, 0x80, 0xE1, 0x9B
.byte 0x0F, 0x65, 0x65, 0x2C, 0xF3, 0x77, 0xB7, 0xB4, 0xE2, 0x05, 0xCF, 0x71, 0xA5, 0xD6, 0x45, 0xD9
.byte 0x0A, 0x92, 0x11, 0xA1, 0x6D, 0xA0, 0x9C, 0x02, 0x02, 0x9B, 0x97, 0x4B, 0x1C, 0x78, 0xE6, 0x2B
.byte 0xDD, 0x4B, 0x57, 0xD1, 0xC3, 0x0F, 0x86, 0xA5, 0x14, 0x55, 0x17, 0xB9, 0x2C, 0x5D, 0x93, 0x37
.byte 0xEF, 0xA4, 0xD9, 0x5D, 0x45, 0x75, 0x60, 0x47, 0x11, 0xF7, 0x93, 0x2D, 0x70, 0x79, 0x59, 0x4E
.byte 0xC5, 0xB0, 0x1F, 0x88, 0xC0, 0xA6, 0x2E, 0xD4, 0xFC, 0x45, 0x8E, 0x29, 0xA2, 0x22, 0x60, 0x92
.byte 0xC7, 0x39, 0xEF, 0x0C, 0xAE, 0x50, 0x54, 0xC0, 0x48, 0xE7, 0xED, 0xB8, 0x60, 0x46, 0x06, 0x25
.byte 0xF7, 0x26, 0xAD, 0xB7, 0xCD, 0xDC, 0x8C, 0xC9, 0x21, 0x1A, 0xF2, 0xC4, 0x3D, 0x52, 0x56, 0x04
.byte 0x8C, 0x46, 0x10, 0x3A, 0x96, 0x65, 0xFA, 0xDE, 0x4C, 0xE8, 0x97, 0xAD, 0x2E, 0x9E, 0xD3, 0x26
.byte 0xC4, 0x81, 0xDD, 0x92, 0x5D, 0x69, 0x5B, 0x7E, 0x84, 0x4D, 0x43, 0xC1, 0xA0, 0x9A, 0xC6, 0x2C
.byte 0xE0, 0xD6, 0x67, 0x77, 0x3B, 0x62, 0x55, 0x88, 0x4A, 0xEC, 0x35, 0x79, 0x8A, 0x09, 0x9F, 0x4F
.byte 0x8A, 0x7D, 0xE1, 0xE7, 0xE7, 0x3D, 0x66, 0x6C, 0x8B, 0xAA, 0x2D, 0x2B, 0x44, 0xF3, 0x57, 0x24
.byte 0xCA, 0xBF, 0x9B, 0x06, 0x21, 0xF1, 0x8F, 0x6B, 0xDE, 0xC4, 0xE5, 0x69, 0xCE, 0x85, 0xB9, 0x58
.byte 0x02, 0x9B, 0x40, 0xE9, 0xD8, 0xA7, 0x55, 0x63, 0x51, 0x83, 0x8E, 0x95, 0x77, 0xE6, 0xBA, 0x42
.byte 0xA5, 0x56, 0x49, 0xC7, 0x47, 0xD8, 0x32, 0x25, 0x9D, 0x18, 0x8E, 0x6B, 0x9D, 0x48, 0xC4, 0x9F
.byte 0xE3, 0x04, 0x89, 0xBB, 0xAB, 0xDF, 0x1F, 0xFD, 0x62, 0xAD, 0x92, 0xDA, 0x94, 0x4D, 0x1C, 0x3A
.byte 0xA3, 0x65, 0x01, 0xEA, 0x3E, 0x34, 0x10, 0xDB, 0x4C, 0x9F, 0x46, 0xE9, 0xE7, 0x0A, 0x89, 0xCA
.byte 0x0F, 0x13, 0x86, 0xBA, 0xF2, 0xA5, 0xB8, 0x55, 0x53, 0x4A, 0x2F, 0xE7, 0x98, 0x4C, 0x22, 0x3B
.byte 0xB2, 0x23, 0x26, 0xF0, 0x58, 0x36, 0xCB, 0xA4, 0xD6, 0x12, 0x8E, 0xBD, 0x1D, 0x18, 0x88, 0x2C
.byte 0x2B, 0x0E, 0xE7, 0x1D, 0xB4, 0x9F, 0x72, 0x07, 0xEA, 0xA2, 0xEF, 0x82, 0xEE, 0x11, 0xBD, 0xA1
.byte 0x35, 0xE3, 0x91, 0x8D, 0x1A, 0x5D, 0x32, 0xF0, 0x70, 0xC1, 0xAE, 0x8D, 0xD9, 0x36, 0xB9, 0x04
.byte 0x45, 0xA0, 0x22, 0xF9, 0x3F, 0x95, 0x01, 0x2A, 0x37, 0xF0, 0xAC, 0x26, 0x02, 0x69, 0xC8, 0x38
.byte 0x4D, 0x59, 0xC6, 0x67, 0xB7, 0xF9, 0x57, 0x27, 0xBA, 0x05, 0xB5, 0x93, 0x3C, 0x6E, 0x98, 0x82
.byte 0x0F, 0xBA, 0x7B, 0x4F, 0x50, 0x7D, 0x79, 0x88, 0x6E, 0x25, 0xAE, 0x70, 0x8F, 0x76, 0xA9, 0xDC
.byte 0xD0, 0x6F, 0x43, 0x88, 0x69, 0x9B, 0xB0, 0x23, 0xA1, 0x65, 0xB7, 0xDD, 0xD4, 0x4F, 0x5F, 0xE3
.byte 0x0A, 0xDB, 0x32, 0x5A, 0x58, 0xAC, 0xE2, 0xC6, 0xD2, 0x91, 0x37, 0x61, 0x08, 0xE1, 0x3D, 0xD9
.byte 0x50, 0x81, 0x61, 0xBA, 0x1C, 0x11, 0xDD, 0xBD, 0x76, 0x94, 0x9B, 0x4A, 0xE4, 0xFA, 0x2E, 0xEE
.byte 0xD6, 0x61, 0x49, 0x2E, 0x0D, 0x2C, 0xF5, 0xE0, 0xBE, 0x2C, 0x41, 0xC6, 0x0D, 0x7F, 0xA0, 0x5E
.byte 0x00, 0x01, 0x18, 0x1D, 0x13, 0xF6, 0xDB, 0x8A, 0x8A, 0x76, 0xD5, 0x6E, 0x71, 0x03, 0x5D, 0x47
.byte 0x64, 0xA7, 0x75, 0x72, 0xD4, 0x6B, 0x53, 0x92, 0x97, 0x94, 0x59, 0xA5, 0x13, 0xF9, 0x04, 0x14
.byte 0xFB, 0x1D, 0x31, 0x0E, 0x13, 0x0C, 0x98, 0x9E, 0x83, 0x6D, 0x0D, 0xF4, 0x71, 0x6B, 0x3B, 0xD6
.byte 0x12, 0xB1, 0x49, 0xE6, 0x1C, 0x9C, 0x79, 0xB4, 0x30, 0xD2, 0x5A, 0x44, 0xCC, 0x5E, 0x59, 0xC7
.byte 0x7C, 0x8A, 0xD6, 0x8F, 0x97, 0x6F, 0x2E, 0x1A, 0xDD, 0x3B, 0x0E, 0x4E, 0xA6, 0x4A, 0x25, 0xB9
.byte 0xFB, 0x6E, 0xA0, 0x18, 0x0A, 0x19, 0xCC, 0x3B, 0xEC, 0x26, 0x80, 0xB9, 0x85, 0xD9, 0x80, 0x01
.byte 0x64, 0x57, 0x91, 0xFB, 0xC6, 0xBF, 0x16, 0xA3, 0xFB, 0x25, 0xF2, 0xA1, 0x6F, 0x17, 0x5B, 0x6B
.byte 0x86, 0xFB, 0x83, 0x91, 0x15, 0x50, 0xCC, 0x01, 0x77, 0x4D, 0xBA, 0xFC, 0x27, 0x3B, 0xFE, 0x8B
.byte 0x93, 0x90, 0x87, 0x59, 0x4F, 0x9E, 0xFD, 0x4A, 0xC3, 0xEF, 0xEC, 0x33, 0x07, 0x48, 0x9E, 0x8D
.byte 0x43, 0x22, 0x1E, 0x59, 0x73, 0xEB, 0x5B, 0xEA, 0x38, 0x16, 0xE7, 0x5F, 0x51, 0xE6, 0xEB, 0xE5
.byte 0x76, 0x72, 0x3E, 0xC5, 0x10, 0x3B, 0x10, 0xD4, 0x2B, 0xFC, 0x07, 0x32, 0x44, 0xA6, 0xC0, 0x88
.byte 0xC9, 0xDE, 0xE1, 0x3C, 0xCA, 0x3C, 0x27, 0x03, 0x53, 0x0E, 0x62, 0xA4, 0xF4, 0x4E, 0x89, 0x6A
.byte 0xC1, 0xC8, 0x30, 0xD1, 0x04, 0x40, 0xA6, 0x30, 0x3D, 0xAD, 0x62, 0x82, 0x54, 0x23, 0x0B, 0x1E
.byte 0x01, 0xED, 0x5A, 0xCB, 0x29, 0x81, 0xCE, 0x7C, 0x90, 0x31, 0x21, 0x85, 0x80, 0xAB, 0xF0, 0x41
.byte 0x74, 0x20, 0x12, 0x78, 0x61, 0xB9, 0xA8, 0x9F, 0x66, 0x0B, 0x21, 0xBB, 0x2E, 0x2C, 0xD9, 0x30
.byte 0x19, 0x34, 0xFC, 0x43, 0xB6, 0xCB, 0xC0, 0x46, 0xFD, 0xE2, 0xCC, 0x7D, 0x8E, 0xBC, 0xBE, 0x02
.byte 0xDD, 0xD1, 0x7B, 0x3E, 0x8A, 0x24, 0xDD, 0xF1, 0x30, 0xFF, 0xAD, 0x5F, 0x2C, 0x86, 0x90, 0x46
.byte 0xBB, 0x8D, 0x8A, 0x71, 0x58, 0x4A, 0xB8, 0x56, 0x2D, 0x84, 0xD3, 0xBC, 0x40, 0x92, 0xBF, 0x1D
.byte 0x64, 0x3A, 0x5C, 0xEF, 0x5F, 0x3A, 0xE0, 0x90, 0x39, 0x8E, 0xF0, 0x65, 0x14, 0x80, 0xAC, 0xCF
.byte 0x0D, 0x36, 0x40, 0x66, 0x81, 0xF9, 0xBC, 0xAE, 0x7D, 0x90, 0x6B, 0xBE, 0x23, 0x2A, 0xDC, 0x88
.byte 0x65, 0x38, 0x77, 0xC5, 0x72, 0x58, 0x55, 0xAC, 0xE6, 0x45, 0x11, 0xFB, 0xC6, 0xBE, 0xCA, 0xD3
.byte 0xF4, 0x0B, 0x3A, 0x75, 0x04, 0xF7, 0x24, 0x82, 0x87, 0x8F, 0x40, 0xAB, 0xB9, 0x1D, 0x33, 0x1F
.byte 0x55, 0xAB, 0xE4, 0xC8, 0x03, 0x39, 0x74, 0xEA, 0x7F, 0x86, 0xE5, 0x45, 0x44, 0xAF, 0x19, 0x38
.byte 0xBB, 0x53, 0xAE, 0xC0, 0x4A, 0xD2, 0x43, 0xD2, 0x62, 0x84, 0x7E, 0x1C, 0xA1, 0xB2, 0x3B, 0xF6
.byte 0x5D, 0x1F, 0xBE, 0x60, 0x59, 0x33, 0x4A, 0xD9, 0xB9, 0x30, 0x1E, 0xFE, 0xE0, 0x38, 0x37, 0x9B
.byte 0x8C, 0xE5, 0x5C, 0xD6, 0xB7, 0x9F, 0xA9, 0x1A, 0x23, 0x28, 0x36, 0xC4, 0xDA, 0x71, 0xBB, 0x37
.byte 0x91, 0x7A, 0x98, 0xEB, 0xAD, 0xE2, 0xC4, 0x67, 0x13, 0xE3, 0x66, 0xF3, 0x1B, 0x9D, 0x8E, 0xA7
.byte 0x82, 0xEB, 0x7E, 0x3A, 0x8B, 0x28, 0x54, 0xAF, 0x50, 0x8B, 0x73, 0x2A, 0xFC, 0x2F, 0x61, 0x8E
.byte 0xA9, 0xF9, 0x79, 0x57, 0xDC, 0x3D, 0xBF, 0xEF, 0x20, 0x25, 0xE2, 0x3C, 0xC3, 0x71, 0xE3, 0x45
.byte 0x5D, 0x62, 0x80, 0xE8, 0x8A, 0xD4, 0x97, 0xDB, 0x5F, 0x0B, 0x05, 0x5C, 0x3B, 0x67, 0xEA, 0xE4
.byte 0x61, 0x64, 0x3C, 0x3D, 0xA1, 0xFC, 0x2D, 0xC2, 0x22, 0x10, 0xFF, 0xE5, 0x82, 0xE2, 0x2A, 0xDF
.byte 0x45, 0xAA, 0xC7, 0xD0, 0x7F, 0x5F, 0xAB, 0xDF, 0x6B, 0xB0, 0x3C, 0xA6, 0x17, 0x27, 0x8B, 0x78
.byte 0x8B, 0xC7, 0xB6, 0x2D, 0xC4, 0xE4, 0xEF, 0xE6, 0xF4, 0xEF, 0xCB, 0x77, 0xD1, 0xF6, 0x56, 0x17
.byte 0xA1, 0x1E, 0xE7, 0x21, 0x7D, 0x92, 0x01, 0xE9, 0x43, 0x3D, 0x8F, 0x5B, 0x64, 0x1A, 0xD4, 0xF0
.byte 0xE2, 0x8A, 0x1D, 0xA6, 0x6E, 0x0D, 0x8C, 0x63, 0xFC, 0x58, 0xDA, 0xCE, 0x4F, 0x31, 0xE5, 0xF0
.byte 0x4F, 0xCD, 0x12, 0xCD, 0x5F, 0x13, 0xB6, 0xA3, 0x50, 0x45, 0xFE, 0xB5, 0x60, 0xD2, 0xA5, 0x42
.byte 0x5C, 0xC3, 0xE8, 0xCB, 0xD0, 0x75, 0x2F, 0xCC, 0xCE, 0x0A, 0x9A, 0x1D, 0x3B, 0x80, 0x0E, 0x8B
.byte 0x4D, 0x21, 0x58, 0xAD, 0x34, 0x0F, 0x50, 0x85, 0x55, 0x4E, 0x3B, 0xB5, 0x20, 0xE1, 0xF8, 0x7D
.byte 0xA4, 0xE1, 0x49, 0x74, 0x57, 0x79, 0x41, 0x25, 0x83, 0xDB, 0x43, 0xBF, 0x5C, 0x52, 0x4A, 0xA9
.byte 0x73, 0xA3, 0x57, 0xA8, 0xB2, 0xA7, 0x2E, 0x08, 0xF6, 0x69, 0xBE, 0x17, 0x4A, 0xB6, 0x95, 0xEE
.byte 0x98, 0xDE, 0x63, 0xEF, 0x57, 0xA4, 0x15, 0xDB, 0x80, 0x59, 0x9A, 0xDC, 0xAC, 0xE5, 0x86, 0x20
.byte 0x88, 0xDD, 0xC8, 0x3B, 0x85, 0xF7, 0x43, 0x7C, 0x60, 0x02, 0x93, 0xAB, 0xB9, 0x28, 0x9A, 0x51
.byte 0x07, 0xFD, 0x40, 0x5F, 0xA2, 0x56, 0x3A, 0x22, 0xAF, 0xD5, 0xFE, 0x5B, 0xBA, 0x85, 0x7B, 0x43
.byte 0x63, 0x44, 0x7E, 0xE8, 0x3B, 0xC2, 0x65, 0x9C, 0xC5, 0xF8, 0x48, 0x7E, 0x21, 0xE2, 0xCF, 0x28
.byte 0xE0, 0x10, 0x87, 0x82, 0x67, 0xC2, 0xA4, 0x16, 0x98, 0xA3, 0x72, 0x53, 0x29, 0xEE, 0x96, 0x8C
.byte 0x32, 0x15, 0x75, 0x6E, 0xD7, 0xDA, 0x0B, 0x9C, 0xD3, 0x53, 0x1B, 0xF4, 0x35, 0xEB, 0x1C, 0x15
.byte 0xFC, 0xA4, 0x98, 0x63, 0x67, 0x3D, 0x7A, 0xFF, 0xE0, 0xEC, 0x52, 0x0A, 0xDA, 0xE9, 0x96, 0x0D
.byte 0xFE, 0x0B, 0x7C, 0xD5, 0xE6, 0x87, 0x72, 0xB9, 0xDA, 0x8E, 0xAD, 0x0F, 0x79, 0xCA, 0x25, 0x75
.byte 0x6E, 0xBE, 0xD8, 0xD5, 0xFB, 0x52, 0xD5, 0xDC, 0x3E, 0x27, 0xE6, 0x19, 0x10, 0x7D, 0x27, 0x0E
.byte 0x88, 0xA3, 0xE4, 0x6E, 0x2A, 0x57, 0x28, 0x05, 0xE5, 0xD5, 0x15, 0x5E, 0x9F, 0x3A, 0xD4, 0x0D
.byte 0xF9, 0xAC, 0xE3, 0xF4, 0xFE, 0xB8, 0xD1, 0x3D, 0xE0, 0xB8, 0x57, 0xF1, 0x35, 0x7F, 0x00, 0xBD
.byte 0x22, 0xE5, 0x2C, 0x4D, 0x3C, 0x54, 0x52, 0x22, 0x2A, 0x68, 0x81, 0xC9, 0xA3, 0x55, 0xD7, 0x9C
.byte 0x02, 0xBA, 0x91, 0x00, 0x73, 0x62, 0x3E, 0x54, 0x1A, 0x96, 0x45, 0x4F, 0x15, 0x45, 0x0D, 0x38
.byte 0x2B, 0x3A, 0x85, 0x68, 0x8F, 0xD8, 0x8A, 0xB9, 0x40, 0x0C, 0x83, 0xE3, 0x61, 0x5B, 0x80, 0x63
.byte 0x15, 0x11, 0x64, 0x89, 0x73, 0xA3, 0xDD, 0x8E, 0x3A, 0x23, 0xDE, 0x4F, 0x69, 0xEC, 0x87, 0x94
.byte 0x27, 0x0D, 0xFC, 0xB7, 0xE6, 0x87, 0x71, 0x27, 0x93, 0xF4, 0x0B, 0xF5, 0x4F, 0x8C, 0x59, 0x65
.byte 0x9D, 0xBE, 0xEF, 0x11, 0x62, 0xCD, 0xA0, 0x9C, 0xF0, 0x7E, 0xEC, 0x59, 0x6B, 0x74, 0xEE, 0x92
.byte 0x81, 0xEB, 0x49, 0x68, 0x72, 0xBA, 0x90, 0x06, 0xAF, 0x9C, 0xFC, 0xFE, 0x28, 0x56, 0x64, 0xC5
.byte 0x14, 0x53, 0xD7, 0x76, 0x20, 0x77, 0x13, 0x11, 0xF5, 0xFF, 0x6B, 0x61, 0x73, 0x59, 0xF3, 0xF5
.byte 0x45, 0x3D, 0x5E, 0xB7, 0xF7, 0xEE, 0xBE, 0xA6, 0x8B, 0xBB, 0xA5, 0xB3, 0x11, 0x09, 0x79, 0x25
.byte 0x5D, 0x50, 0x9C, 0x7D, 0xC7, 0xAF, 0x8F, 0xBD, 0xAE, 0xFA, 0x1E, 0x22, 0x53, 0x12, 0x17, 0x98
.byte 0x4F, 0x75, 0x50, 0x46, 0x63, 0x0F, 0xED, 0xEE, 0xCA, 0x92, 0xA2, 0xDC, 0x9C, 0x1B, 0x01, 0xF9
.byte 0x6B, 0x9E, 0x77, 0x33, 0x4E, 0x06, 0xF1, 0xFC, 0x00, 0x0F, 0x1F, 0x54, 0x21, 0x36, 0xED, 0x70
.byte 0xAB, 0x3D, 0xB7, 0x0F, 0x4D, 0xA4, 0xFE, 0x18, 0x37, 0xA0, 0xF4, 0xD3, 0xBC, 0xF5, 0xCD, 0x28
.byte 0x94, 0x44, 0x5C, 0xE2, 0x4B, 0x4D, 0xDF, 0x4C, 0x5C, 0xFE, 0xA0, 0x7E, 0x34, 0x8D, 0xEE, 0xE0
.byte 0xCB, 0xA6, 0xF0, 0x18, 0x4A, 0xEE, 0x30, 0x81, 0x8F, 0x25, 0x55, 0x4C, 0x1B, 0x22, 0x74, 0xAF
.byte 0x67, 0xD0, 0x91, 0xB2, 0x1D, 0x71, 0xFE, 0x7A, 0x70, 0x9F, 0xF8, 0xA4, 0x2C, 0xE7, 0x85, 0xF8
.byte 0x8E, 0x75, 0x11, 0xD8, 0x64, 0x42, 0x5A, 0xF3, 0x67, 0xB0, 0x3F, 0x82, 0xD3, 0xB4, 0x31, 0x3A
.byte 0x85, 0xC3, 0xED, 0xA3, 0x35, 0xEC, 0x1D, 0xA5, 0x8B, 0x16, 0x4A, 0xB8, 0xFE, 0xCF, 0xB0, 0x8C
.byte 0x45, 0xC2, 0x65, 0xA9, 0x04, 0xC0, 0x9D, 0x6B, 0x71, 0xDD, 0xED, 0x44, 0x91, 0x1F, 0x7E, 0x16
.byte 0xE3, 0x6B, 0xB9, 0x18, 0x57, 0xD7, 0xBD, 0xE3, 0xEE, 0x07, 0x9B, 0xEC, 0xD7, 0x4C, 0x79, 0x1C
.byte 0x0F, 0xDF, 0xC5, 0x13, 0xA0, 0x63, 0x7F, 0x11, 0x40, 0x6D, 0x55, 0xD1, 0x8C, 0xD4, 0xE8, 0x6F
.byte 0x3F, 0xA2, 0x87, 0x97, 0x79, 0x44, 0x7B, 0x68, 0x4C, 0x17, 0x54, 0x23, 0x64, 0xCE, 0x3F, 0x73
.byte 0xAE, 0x05, 0x86, 0x4E, 0x68, 0x06, 0x60, 0xA8, 0x73, 0xB6, 0x7A, 0xFF, 0x8A, 0x62, 0x6F, 0xCA
.byte 0x04, 0xF6, 0x62, 0x7E, 0x3B, 0xDD, 0xE6, 0x87, 0xF4, 0x3B, 0xAB, 0x58, 0x0A, 0xEA, 0xCC, 0xB8
.byte 0xEF, 0x53, 0x07, 0x58, 0x59, 0x68, 0x00, 0xCC, 0x1E, 0x7A, 0xCC, 0xA8, 0xDD, 0x3B, 0x72, 0xE2
.byte 0x31, 0xD4, 0x60, 0x6D, 0xB2, 0x47, 0xF5, 0xA6, 0x83, 0xA0, 0xFF, 0x8D, 0x8B, 0xCC, 0x46, 0x7A
.byte 0x1F, 0x4E, 0xD3, 0x78, 0xB6, 0xD3, 0x45, 0xD5, 0x4E, 0x11, 0x7D, 0x2C, 0x4C, 0xF0, 0x0E, 0x7E
.byte 0xC4, 0x6F, 0xEC, 0x77, 0xB6, 0xE1, 0x1D, 0x39, 0x82, 0x1D, 0xC7, 0x0D, 0xE9, 0x0D, 0x88, 0x09
.byte 0x5C, 0x5B, 0x81, 0x12, 0x2F, 0xC7, 0xE7, 0x7D, 0xD8, 0x65, 0xA9, 0x25, 0x55, 0xB8, 0xA3, 0x1A
.byte 0x27, 0x90, 0x91, 0xDD, 0x71, 0xAF, 0x17, 0xF3, 0xCD, 0xDE, 0x00, 0xB6, 0xEC, 0x88, 0xBF, 0x48
.byte 0xE4, 0x41, 0x5B, 0x13, 0x09, 0x43, 0x90, 0xE1, 0xA8, 0x3A, 0x07, 0xFE, 0xF3, 0xAB, 0x18, 0x1A
.byte 0x3B, 0xAA, 0xF8, 0xAC, 0x59, 0x0F, 0xA0, 0x26, 0xEE, 0xA1, 0xDD, 0xDB, 0x2A, 0x9D, 0x23, 0x0E
.byte 0xDF, 0x7E, 0x21, 0xE8, 0xC2, 0xB2, 0xCA, 0x6A, 0xED, 0xD1, 0x68, 0xE0, 0x7C, 0x81, 0xFA, 0xB7
.byte 0x2B, 0xF3, 0x64, 0x85, 0x02, 0x04, 0xAB, 0xF1, 0xA6, 0x89, 0xCC, 0xD1, 0x26, 0xF0, 0xDF, 0x05
.byte 0x6F, 0x01, 0xEE, 0x31, 0xB4, 0xB8, 0x9B, 0xA1, 0x89, 0x04, 0x82, 0x05, 0x85, 0x7C, 0xBC, 0xB1
.byte 0x6F, 0x20, 0x36, 0x72, 0x25, 0xE1, 0x64, 0xCB, 0x6B, 0x30, 0x9C, 0x91, 0x20, 0x7C, 0x97, 0x90
.byte 0x7D, 0x85, 0xC1, 0x32, 0x3D, 0x5D, 0xD3, 0xC6, 0x61, 0x55, 0xCC, 0xE7, 0xD2, 0x88, 0x98, 0x42
.byte 0xA8, 0xCE, 0xB5, 0xCE, 0xB0, 0x19, 0x9A, 0x1B, 0x49, 0x37, 0xAD, 0x6A, 0xB3, 0x45, 0xFA, 0x31
.byte 0xCA, 0xBC, 0x63, 0x08, 0x19, 0x37, 0xCF, 0x7B, 0x8D, 0x9B, 0x62, 0x5F, 0x23, 0xFB, 0xA1, 0xCC
.byte 0xCA, 0x57, 0x9A, 0x7A, 0x70, 0x35, 0x96, 0xBA, 0x6C, 0x44, 0x24, 0x20, 0x89, 0x1F, 0x52, 0x53
.byte 0xDC, 0xB6, 0x5C, 0xF5, 0xEE, 0x2B, 0x71, 0x7B, 0xC6, 0xD3, 0xDA, 0xEA, 0xCF, 0x7C, 0xB6, 0x99
.byte 0xD3, 0x51, 0x14, 0x44, 0x86, 0xAA, 0xFE, 0xF3, 0xEF, 0x23, 0x14, 0x78, 0x43, 0x66, 0xCC, 0x1F
.byte 0x1D, 0x28, 0x15, 0x0B, 0x54, 0x86, 0x86, 0x1A, 0x5A, 0x61, 0x04, 0x29, 0xDE, 0xBB, 0xC3, 0xB2
.byte 0x0D, 0xD7, 0xF6, 0x94, 0x82, 0xF4, 0x87, 0x71, 0x17, 0x9C, 0xE9, 0x5A, 0x03, 0xB6, 0x7A, 0x20
.byte 0xDE, 0x8F, 0x2C, 0x33, 0x16, 0xB3, 0x4D, 0x70, 0x15, 0x52, 0x9A, 0xF3, 0x0E, 0x5D, 0xA6, 0x1B
.byte 0x35, 0x9C, 0xAF, 0xB7, 0x90, 0x37, 0x29, 0xA8, 0xD3, 0x12, 0x03, 0xD7, 0xC9, 0x7D, 0xF7, 0xA8
.byte 0x0D, 0x24, 0xDB, 0x23, 0xD7, 0x28, 0x94, 0xED, 0x7B, 0x2F, 0xE0, 0x89, 0x8D, 0x86, 0xA5, 0xC2
.byte 0x23, 0x54, 0x79, 0xB4, 0x8C, 0xA2, 0x5C, 0x60, 0xB5, 0x60, 0x37, 0x7F, 0xDE, 0x2F, 0x27, 0xEB
.byte 0x53, 0x02, 0x0F, 0x2B, 0x2B, 0xA4, 0x18, 0xA6, 0xD3, 0xF9, 0x30, 0x60, 0x7F, 0xD5, 0x22, 0xA3
.byte 0x2A, 0x9C, 0x57, 0xB7, 0x3F, 0xB4, 0x17, 0xF5, 0x14, 0x4E, 0x74, 0xF2, 0x7E, 0x9B, 0xDE, 0xD1
.byte 0x9E, 0xED, 0xFD, 0xC9, 0x91, 0x15, 0x70, 0x65, 0x0E, 0xA1, 0xC5, 0x8E, 0x77, 0xE8, 0x31, 0xA2
.byte 0x84, 0x89, 0x59, 0xC4, 0x3D, 0x71, 0xB9, 0x51, 0xC0, 0x2D, 0x44, 0x3E, 0xC9, 0x22, 0x10, 0x67
.byte 0x10, 0x0D, 0x31, 0xA2, 0x22, 0xA2, 0x07, 0x31, 0x43, 0xCC, 0xC0, 0xBB, 0xB5, 0xF2, 0x5D, 0x39
.byte 0x7B, 0xB6, 0xFD, 0xB8, 0x27, 0xB7, 0x0A, 0xE7, 0xE5, 0x4E, 0x26, 0xAE, 0x70, 0x36, 0x16, 0x81
.byte 0x43, 0x48, 0x23, 0x66, 0xEA, 0x2B, 0x98, 0x2E, 0xF8, 0x58, 0xE9, 0xAD, 0x4A, 0x46, 0xE6, 0xC6
.byte 0xFD, 0xE4, 0x7E, 0x25, 0x9B, 0x88, 0x0C, 0x80, 0xD6, 0x33, 0x2F, 0x47, 0x69, 0x45, 0xC9, 0xAC
.byte 0x8E, 0xEC, 0x13, 0x78, 0x17, 0xAB, 0xA6, 0x0F, 0x04, 0x8F, 0xBD, 0x4F, 0xD6, 0xA3, 0x15, 0xD3
.byte 0x88, 0x93, 0xF8, 0x24, 0x1C, 0x05, 0xA5, 0xF3, 0x38, 0xD4, 0x3B, 0xA1, 0x1A, 0x04, 0x4E, 0xA8
.byte 0xF0, 0x61, 0x21, 0x08, 0x0D, 0xC7, 0x18, 0x11, 0x57, 0xD5, 0x60, 0x2D, 0x79, 0x75, 0x01, 0x02
.byte 0x09, 0xF9, 0x26, 0x26, 0xFF, 0xCB, 0x19, 0x37, 0xA0, 0x54, 0xD8, 0xBA, 0x58, 0x27, 0x63, 0x49
.byte 0x89, 0x84, 0x52, 0x96, 0x4C, 0x6B, 0xA8, 0xA3, 0x40, 0x08, 0xD1, 0xBA, 0x7E, 0xD2, 0xBC, 0x88
.byte 0xCB, 0xE2, 0xAE, 0xCA, 0xAE, 0xC7, 0x02, 0x4E, 0x1C, 0xDB, 0x09, 0x74, 0x02, 0x6C, 0xBE, 0x8B
.byte 0xF1, 0x10, 0x22, 0x3D, 0x7B, 0xCA, 0xE1, 0xBC, 0xD3, 0xB2, 0x76, 0x52, 0x84, 0x33, 0xDA, 0x50
.byte 0x16, 0x89, 0x1B, 0xC4, 0x51, 0x1D, 0x13, 0x6D, 0xF8, 0x1C, 0xE2, 0xFB, 0x89, 0xA0, 0x87, 0x7B
.byte 0xB1, 0xA9, 0xB8, 0x2D, 0x74, 0x99, 0xE9, 0x47, 0x4C, 0x60, 0x99, 0xD0, 0x93, 0x74, 0x21, 0xA9
.byte 0xFD, 0x3C, 0x6E, 0x4E, 0x59, 0x81, 0xBC, 0x52, 0x9E, 0x9E, 0x4E, 0x27, 0x3F, 0xD5, 0xA2, 0xF1
.byte 0x7F, 0x5B, 0x1E, 0xF3, 0xF5, 0x08, 0x3B, 0x41, 0x68, 0xD4, 0x12, 0xFC, 0x49, 0x33, 0xA6, 0x46
.byte 0x70, 0x15, 0x95, 0xCA, 0x96, 0x51, 0x1C, 0x34, 0xF0, 0x6B, 0x5C, 0x30, 0x40, 0xFF, 0x21, 0xBF
.byte 0x5B, 0x40, 0xB2, 0x50, 0x48, 0xEE, 0x92, 0xB0, 0xC3, 0xA5, 0xAD, 0x0C, 0xD9, 0x54, 0x53, 0x49
.byte 0x69, 0xE8, 0x13, 0xFF, 0x3A, 0x30, 0x34, 0x2B, 0x9B, 0x91, 0x5B, 0xDC, 0x91, 0x7D, 0x9B, 0xEC
.byte 0xBD, 0x4E, 0x3C, 0x05, 0x3C, 0xCF, 0xB6, 0xFF, 0x74, 0x64, 0x0C, 0x4E, 0xB8, 0x5F, 0x97, 0x21
.byte 0x48, 0xAB, 0x21, 0x83, 0xDC, 0x56, 0xAE, 0x77, 0xE8, 0x0A, 0x53, 0x79, 0x88, 0xEF, 0x65, 0x46
.byte 0x3E, 0xA2, 0x4B, 0x7A, 0x72, 0x02, 0x7A, 0xE7, 0x66, 0x86, 0x35, 0x1F, 0xE6, 0xCC, 0x40, 0x2E
.byte 0x78, 0x62, 0xB2, 0x54, 0xB9, 0x61, 0xCC, 0xA1, 0x6B, 0x1F, 0x1A, 0xF4, 0x0F, 0x80, 0x3A, 0x4D
.byte 0x22, 0x86, 0xC8, 0x94, 0x88, 0x42, 0x7B, 0xEF, 0xC9, 0xB0, 0x0E, 0xAF, 0x7D, 0x4F, 0xDE, 0xF6
.byte 0xB2, 0x90, 0x4A, 0x6B, 0xF1, 0x16, 0x0C, 0x5D, 0x36, 0x27, 0x51, 0x45, 0xA7, 0x8C, 0x92, 0xCA
.byte 0x12, 0x5A, 0x5E, 0x9B, 0x9D, 0xDA, 0x8A, 0x67, 0x8B, 0x99, 0x16, 0x09, 0xE8, 0xF5, 0xFF, 0x9A
.byte 0x85, 0x49, 0x06, 0x77, 0x60, 0x13, 0xD4, 0x96, 0x3B, 0x26, 0xDB, 0xE2, 0xB2, 0x6E, 0xAD, 0xC5
.byte 0xC9, 0x0B, 0x60, 0x67, 0xE6, 0xEB, 0xCE, 0x71, 0x84, 0xE5, 0x7B, 0x6D, 0xDA, 0x7A, 0x08, 0x60
.byte 0xC4, 0x0E, 0xD7, 0x24, 0x22, 0xAB, 0xBA, 0x5D, 0xD2, 0x96, 0x3F, 0x85, 0x05, 0xEC, 0x4A, 0xCF
.byte 0xF8, 0xAB, 0x36, 0xDF, 0x96, 0x04, 0x51, 0x1B, 0xE9, 0xCC, 0x88, 0xC3, 0x46, 0x90, 0x23, 0x0A
.byte 0x9F, 0xFB, 0x2E, 0xC1, 0xA7, 0xE9, 0x1E, 0x79, 0x80, 0x5E, 0xFF, 0x85, 0x4B, 0x4A, 0x54, 0x44
.byte 0xF5, 0x8B, 0x23, 0x8C, 0x8F, 0x74, 0xA8, 0x79, 0x41, 0x30, 0x3D, 0x87, 0xC1, 0x61, 0x92, 0x61
.byte 0x5C, 0xC1, 0x22, 0x03, 0xAB, 0x41, 0x7D, 0x2B, 0xA0, 0x7C, 0xB1, 0xEB, 0xC6, 0x06, 0x2F, 0xBC
.byte 0x91, 0x53, 0x49, 0x21, 0xC8, 0xF1, 0x9A, 0x09, 0x22, 0xD7, 0x91, 0xE4, 0x38, 0x24, 0x45, 0x94
.byte 0xE5, 0x68, 0x98, 0x90, 0xAA, 0x15, 0xBB, 0x4A, 0x92, 0x6D, 0x35, 0x59, 0x73, 0x65, 0x16, 0x05
.byte 0xB9, 0x5F, 0x26, 0x81, 0x51, 0xC0, 0x8B, 0x73, 0x97, 0x1D, 0x57, 0xD0, 0x41, 0x9D, 0x64, 0x26
.byte 0x05, 0xFD, 0xB7, 0xB0, 0x12, 0x73, 0xFA, 0xA5, 0xE0, 0x2F, 0xFE, 0x54, 0x95, 0x14, 0x59, 0x4E
.byte 0x74, 0x7F, 0xD0, 0xC5, 0x40, 0x5C, 0x38, 0xD8, 0x79, 0x90, 0xA8, 0xBB, 0x2E, 0x0D, 0xE2, 0x34
.byte 0x0A, 0x99, 0xE4, 0x1D, 0x0C, 0xDE, 0xC2, 0xED, 0x0E, 0xC1, 0x41, 0xA3, 0xD6, 0x9A, 0xF2, 0x4A
.byte 0x1A, 0xC3, 0x0F, 0x5A, 0x20, 0x48, 0x33, 0x99, 0xD9, 0xDB, 0x55, 0x07, 0xE9, 0x37, 0x3B, 0xF4
.byte 0xD0, 0x20, 0x11, 0xDC, 0xFE, 0xD4, 0xC9, 0x0D, 0x96, 0x0B, 0xB0, 0x6C, 0xA5, 0xA3, 0xB7, 0xC0
.byte 0x67, 0xC7, 0x1B, 0x87, 0x0F, 0x4E, 0x21, 0xE9, 0x2A, 0x76, 0xF1, 0x13, 0xAD, 0x2D, 0x08, 0x7D
.byte 0x4D, 0x1A, 0x5A, 0x4B, 0xEE, 0x24, 0x58, 0x85, 0x2F, 0x09, 0xF2, 0xD5, 0xAD, 0xA9, 0x95, 0x14
.byte 0x70, 0xB1, 0x9C, 0x80, 0x00, 0xBD, 0x69, 0x2A, 0x33, 0x5B, 0x3E, 0xE0, 0x88, 0x46, 0x5E, 0xD5
.byte 0x60, 0xB9, 0x21, 0x4F, 0xDD, 0x7A, 0xD5, 0x0C, 0x84, 0xC7, 0xE2, 0x32, 0x70, 0x78, 0x47, 0xE0
.byte 0x29, 0xE3, 0x61, 0x29, 0xA0, 0xCB, 0x54, 0xD4, 0x26, 0x93, 0xB5, 0xAE, 0xDA, 0x13, 0x84, 0x3B
.byte 0xCC, 0xA6, 0x8B, 0xAA, 0x21, 0x60, 0xB6, 0xA5, 0x27, 0x99, 0xD8, 0x97, 0x11, 0x1F, 0x78, 0x3A
.byte 0x02, 0xDA, 0x64, 0xA3, 0xA5, 0xB9, 0x77, 0xCB, 0x4D, 0x2D, 0x7A, 0x27, 0x40, 0xFF, 0x63, 0x0D
.byte 0xA5, 0xEE, 0xB7, 0xC7, 0x4E, 0x6E, 0x6C, 0x76, 0x07, 0x45, 0x0E, 0x19, 0x64, 0x87, 0x54, 0x67
.byte 0x61, 0xB9, 0x0A, 0x06, 0x72, 0x82, 0xD2, 0xBF, 0xB0, 0x4D, 0xE7, 0xF0, 0x4D, 0x4A, 0xFE, 0xF3
.byte 0x39, 0xB6, 0xBA, 0x87, 0x25, 0x27, 0xFE, 0x2C, 0x6C, 0x0C, 0x46, 0xD0, 0x94, 0x9A, 0x38, 0xF5
.byte 0x53, 0x43, 0xFC, 0xC5, 0xC6, 0xCF, 0x85, 0x76, 0x1D, 0x6D, 0x67, 0x6A, 0xB7, 0x65, 0x5D, 0xF0
.byte 0x1C, 0x18, 0x78, 0x41, 0x3F, 0x77, 0x6E, 0xAB, 0x84, 0xB4, 0x7C, 0x18, 0x4E, 0xB4, 0x0E, 0xA1
.byte 0xF8, 0x0A, 0x67, 0xBE, 0xDA, 0xED, 0x34, 0xF7, 0x5A, 0x9B, 0x62, 0x12, 0x01, 0xC0, 0x03, 0x1D
.byte 0xD8, 0x7C, 0x5E, 0x18, 0xF3, 0xCD, 0xC4, 0x77, 0x81, 0x40, 0x8F, 0xD0, 0xF5, 0x9E, 0x72, 0xEE
.byte 0xA8, 0xDA, 0xAC, 0x83, 0xC7, 0xE0, 0x7A, 0x22, 0x7C, 0xDC, 0x35, 0x7D, 0x9D, 0x39, 0x9A, 0x75
.byte 0xB5, 0xF9, 0x8D, 0xA8, 0xC6, 0x52, 0x20, 0x48, 0x93, 0xB0, 0x18, 0x89, 0x4E, 0x8B, 0x77, 0xF7
.byte 0x65, 0x23, 0x7A, 0x2D, 0x03, 0xF5, 0x4F, 0x7F, 0xD2, 0x85, 0xFD, 0x6F, 0xBE, 0x97, 0xE4, 0x73
.byte 0x91, 0x72, 0x1C, 0x58, 0xC4, 0x3D, 0xA1, 0x58, 0xED, 0xBA, 0xE1, 0x3C, 0x45, 0x58, 0x33, 0xAA
.byte 0x7B, 0xAE, 0xD7, 0x7F, 0xA3, 0x27, 0xFF, 0x75, 0xAC, 0xFC, 0xE4, 0x6B, 0x94, 0xC9, 0xDE, 0x25
.byte 0x3C, 0xFB, 0x7E, 0x01, 0x38, 0x1F, 0x59, 0x26, 0xDA, 0x3A, 0x63, 0x1F, 0x92, 0x96, 0xC9, 0x0E
.byte 0x45, 0xA1, 0x8D, 0xE8, 0xC8, 0x8C, 0x5D, 0x75, 0x88, 0x42, 0xE0, 0x1C, 0x0B, 0xBF, 0x42, 0x48
.byte 0xBA, 0xC1, 0x49, 0xF3, 0xE1, 0xA2, 0x1A, 0xBB, 0xDD, 0x7D, 0xDA, 0x6F, 0x13, 0xA4, 0x7D, 0x58
.byte 0x45, 0x0B, 0x41, 0x0E, 0x97, 0x9F, 0x83, 0x20, 0xE1, 0x64, 0x3D, 0xED, 0x23, 0x7F, 0x35, 0xDE
.byte 0x40, 0x7E, 0xD1, 0x22, 0x21, 0xEB, 0xDD, 0xFE, 0x68, 0xB8, 0x6E, 0x7C, 0x5C, 0xEC, 0xD5, 0xA2
.byte 0xF7, 0x17, 0xB0, 0x8F, 0xB6, 0x34, 0xAF, 0x97, 0x98, 0xED, 0x85, 0xBC, 0x6C, 0xBA, 0x9A, 0xAD
.byte 0x39, 0x6C, 0xCF, 0x5A, 0x57, 0xAD, 0x59, 0xC0, 0x65, 0xC7, 0x3D, 0xC2, 0xB4, 0x13, 0x64, 0xAC
.byte 0x2A, 0x15, 0x3B, 0xE0, 0x4A, 0xEB, 0x78, 0xE3, 0xD8, 0xFD, 0x9F, 0x45, 0xB8, 0x39, 0xF3, 0xF1
.byte 0xA5, 0xC3, 0x4C, 0xFD, 0x70, 0xA5, 0xBE, 0xD6, 0x6D, 0xFC, 0x98, 0x22, 0x0F, 0xFD, 0xCE, 0x3A
.byte 0x13, 0x0A, 0x1A, 0x5D, 0xF5, 0x93, 0x40, 0xCE, 0x90, 0xDF, 0x14, 0x49, 0x19, 0x07, 0x3A, 0xBF
.byte 0xCA, 0x87, 0xBD, 0x3A, 0x2D, 0x7B, 0x11, 0x9A, 0x78, 0xA9, 0xBD, 0x87, 0xA7, 0x8B, 0xC1, 0xBA
.byte 0x95, 0xDC, 0x18, 0x8B, 0x6F, 0x58, 0x5A, 0x00, 0x38, 0x6E, 0x49, 0x52, 0x75, 0x84, 0x11, 0x40
.byte 0x0B, 0xCF, 0x7A, 0x38, 0x4B, 0x8C, 0xD3, 0xC3, 0x36, 0x90, 0x4B, 0xDD, 0x1C, 0x0D, 0x98, 0xB2
.byte 0xE9, 0xB0, 0x3E, 0x59, 0x09, 0x98, 0x5A, 0x42, 0x07, 0xA3, 0x94, 0x7D, 0x28, 0xA6, 0xBD, 0x33
.byte 0x76, 0x37, 0x6C, 0xC1, 0xC4, 0x40, 0x84, 0xFA, 0xD1, 0xD0, 0xD7, 0xED, 0xDD, 0x6F, 0xA0, 0xC6
.byte 0x20, 0xDE, 0x20, 0x2A, 0x77, 0x7A, 0x6C, 0x7F, 0x1E, 0x01, 0xFC, 0x46, 0xA8, 0xB9, 0x7A, 0x1E
.byte 0xF1, 0xE7, 0xE0, 0xB5, 0x27, 0x65, 0xAF, 0xF8, 0x35, 0x87, 0xE6, 0x12, 0xF7, 0x86, 0xD9, 0x17
.byte 0x65, 0xFA, 0x41, 0xDD, 0x74, 0xAE, 0x5C, 0x92, 0xB0, 0x59, 0xD9, 0x59, 0x12, 0x53, 0x78, 0x03
.byte 0x3A, 0x58, 0xB9, 0x62, 0xBD, 0x68, 0x5A, 0xF3, 0xF0, 0x41, 0x06, 0xE7, 0xC8, 0xE0, 0xFE, 0x2E
.byte 0xDA, 0x40, 0x0B, 0x4E, 0xEF, 0x68, 0xE1, 0x9F, 0xC1, 0xBA, 0xF8, 0xD4, 0x0E, 0x70, 0xD8, 0x49
.byte 0xC9, 0x91, 0xAB, 0x87, 0xFA, 0x06, 0x7A, 0xEA, 0x48, 0x81, 0xD1, 0x10, 0x61, 0xD0, 0x3E, 0x3B
.byte 0x11, 0x4A, 0x8A, 0x00, 0xB3, 0x6C, 0xA0, 0x75, 0x27, 0x99, 0x49, 0x36, 0x09, 0x21, 0x7F, 0xD3
.byte 0xB3, 0x2B, 0x5A, 0xAE, 0x32, 0xD5, 0x98, 0x7A, 0x56, 0x6A, 0x8B, 0xB7, 0x3B, 0xC9, 0xF3, 0x4C
.byte 0x14, 0x7E, 0x4D, 0xC7, 0xEB, 0xED, 0x3C, 0x12, 0x86, 0x86, 0x48, 0x90, 0xA7, 0xC8, 0x63, 0x5B
.byte 0xF4, 0xBE, 0x09, 0x26, 0x93, 0xA2, 0xA1, 0xEA, 0x0D, 0x2C, 0xA1, 0x48, 0xF6, 0x95, 0x94, 0x0B
.byte 0x14, 0xE1, 0xD2, 0xFF, 0xCF, 0x0F, 0x11, 0x55, 0x95, 0x5A, 0xE6, 0x3D, 0x23, 0x49, 0x98, 0x17
.byte 0x08, 0xA2, 0x3E, 0x9B, 0x45, 0xE0, 0x85, 0x52, 0x0D, 0x27, 0x9A, 0x03, 0xBD, 0x2F, 0x0E, 0xD1
.byte 0x11, 0xE1, 0xD0, 0xE0, 0xF0, 0xE2, 0x35, 0x86, 0x3C, 0x1B, 0xC3, 0x5F, 0x65, 0x5C, 0x77, 0x6E
.byte 0xFF, 0xB5, 0x09, 0x44, 0x96, 0x8F, 0x96, 0xA3, 0xB7, 0x31, 0xA7, 0x74, 0x60, 0xB6, 0x45, 0x71
.byte 0x97, 0x16, 0x51, 0x88, 0xF8, 0x87, 0x0E, 0x35, 0xA3, 0xD2, 0x95, 0x09, 0x2F, 0x0C, 0x77, 0x2E
.byte 0xC2, 0x81, 0x73, 0x59, 0x10, 0x09, 0xFC, 0xC7, 0x3A, 0xA3, 0x3C, 0x9B, 0x59, 0x82, 0x0C, 0xF1
.byte 0x98, 0x5D, 0x79, 0x91, 0xE5, 0x88, 0xC7, 0x88, 0x5B, 0x5C, 0x91, 0x8A, 0x69, 0x09, 0xB9, 0x2C
.byte 0x8A, 0x2C, 0x85, 0x9A, 0x35, 0x81, 0x62, 0x70, 0x25, 0x9F, 0x0B, 0x7F, 0x21, 0x18, 0x70, 0xBA
.byte 0x75, 0xEA, 0x4B, 0x5B, 0x72, 0x12, 0xE3, 0xCD, 0x6F, 0x75, 0x58, 0xD9, 0x7E, 0x11, 0x05, 0x09
.byte 0x3D, 0x8B, 0xA3, 0x73, 0x0D, 0x06, 0xE4, 0x32, 0xA5, 0xEF, 0xB1, 0xC7, 0x07, 0x21, 0x81, 0x7D
.byte 0x0B, 0xCD, 0xD9, 0x7E, 0xE0, 0xBC, 0x4C, 0x4F, 0x32, 0xA4, 0x28, 0xB1, 0xB5, 0x2E, 0xBA, 0xF3
.byte 0xB9, 0x5E, 0x66, 0xC6, 0x65, 0x4A, 0xF9, 0x0A, 0x3A, 0xAA, 0xD2, 0x42, 0xCC, 0x53, 0xC0, 0xD8
.byte 0x20, 0x99, 0x56, 0x00, 0x56, 0xA2, 0x50, 0x88, 0x47, 0x79, 0x3A, 0xFD, 0xA7, 0xF4, 0xF0, 0x61
.byte 0x52, 0x57, 0x28, 0xB7, 0xA1, 0x21, 0xC2, 0xDC, 0xCB, 0x94, 0x1F, 0x97, 0xE8, 0xE0, 0x70, 0x08
.byte 0x79, 0xC6, 0x09, 0xD0, 0x69, 0x59, 0x59, 0xB1, 0xD2, 0x93, 0xAE, 0x7A, 0x87, 0x9E, 0xDB, 0xDA
.byte 0xF5, 0x03, 0x92, 0x97, 0x24, 0x55, 0x74, 0xF0, 0xEA, 0x93, 0x88, 0xD2, 0x74, 0xF8, 0xDB, 0xED
.byte 0xBF, 0xE5, 0xBD, 0x28, 0x3F, 0x17, 0xD9, 0x12, 0xAA, 0x88, 0x8C, 0x32, 0x27, 0x68, 0x0D, 0x1C
.byte 0x6C, 0x9F, 0xB4, 0x91, 0xF5, 0x29, 0x81, 0xDF, 0xBD, 0x0A, 0xB2, 0x31, 0x02, 0x8E, 0x1F, 0xC1
.byte 0x73, 0xDC, 0xEA, 0xB3, 0xF4, 0xC4, 0xC5, 0x9E, 0x4C, 0x51, 0xD0, 0x73, 0xBA, 0xDE, 0x90, 0x26
.byte 0x7E, 0x45, 0xB7, 0x73, 0x6E, 0x38, 0x53, 0x2C, 0x42, 0x06, 0x5D, 0x45, 0x94, 0x7C, 0x07, 0x08
.byte 0x59, 0xF1, 0xBB, 0x4D, 0xB6, 0x80, 0xEC, 0x03, 0xD2, 0xBD, 0x77, 0x8C, 0x9B, 0x08, 0xB2, 0x19
.byte 0x4D, 0x6A, 0x8D, 0xBC, 0xA2, 0xE0, 0xE8, 0xE5, 0xE6, 0x46, 0x2B, 0x7B, 0xC2, 0x32, 0x84, 0x1C
.byte 0x24, 0x3F, 0x6A, 0xDB, 0xC0, 0x56, 0xDE, 0x93, 0x13, 0x56, 0x20, 0xAE, 0x5E, 0xD3, 0xC8, 0xAB
.byte 0x3D, 0x55, 0x68, 0xE0, 0x35, 0x51, 0xC6, 0x1C, 0x97, 0xF1, 0x98, 0x5A, 0x24, 0x1C, 0x76, 0x49
.byte 0x5C, 0xE0, 0x24, 0x1D, 0x37, 0x03, 0xB0, 0x4A, 0x59, 0xD1, 0xF9, 0xB7, 0xA4, 0xC1, 0x63, 0xE1
.byte 0x17, 0xCB, 0xC1, 0x4D, 0x1D, 0x87, 0x69, 0xB4, 0x79, 0x02, 0x0E, 0x9D, 0x1E, 0x85, 0xE6, 0x7A
.byte 0x66, 0x0A, 0x98, 0x9E, 0x0E, 0x49, 0xE8, 0x67, 0x1A, 0xE2, 0x1F, 0xBE, 0xA3, 0x82, 0x9F, 0xBB
.byte 0x4E, 0x60, 0x08, 0x6B, 0xE8, 0x72, 0x20, 0x61, 0x74, 0x2F, 0xFE, 0x92, 0xB5, 0xE5, 0x0D, 0x1B
.byte 0xF0, 0xA6, 0xB9, 0xFE, 0xEF, 0xA2, 0x66, 0x09, 0x84, 0x85, 0xC7, 0x28, 0x08, 0x67, 0xE3, 0x57
.byte 0xC8, 0xEC, 0xC2, 0xB0, 0x5E, 0xE3, 0x12, 0xD2, 0x12, 0x11, 0x65, 0xC7, 0xF6, 0x73, 0xE3, 0xE6
.byte 0x19, 0x9D, 0xE5, 0x08, 0x40, 0x4B, 0x12, 0xC5, 0xD1, 0xDA, 0xED, 0xD9, 0x41, 0xD1, 0x30, 0x09
.byte 0xBD, 0xF3, 0xBA, 0x1C, 0xD7, 0xCD, 0xEE, 0xE9, 0xDE, 0x54, 0xB1, 0xD4, 0xC7, 0x95, 0xBB, 0xE1
.byte 0x33, 0xA1, 0xEA, 0x73, 0xED, 0xFC, 0x39, 0xBE, 0xD6, 0x26, 0x98, 0x18, 0xF8, 0xC9, 0x21, 0xB6
.byte 0xBD, 0xDC, 0xD2, 0x94, 0xA9, 0xC1, 0x7E, 0x87, 0x16, 0x2F, 0x5C, 0xDD, 0xC5, 0x18, 0xBF, 0xF8
.byte 0xBA, 0xA9, 0x6C, 0xA7, 0xA5, 0xA5, 0x66, 0x7C, 0xCC, 0xFE, 0x94, 0xC5, 0xC8, 0xB6, 0x7B, 0x85
.byte 0x92, 0x4E, 0x19, 0x3C, 0x10, 0x97, 0xC4, 0x26, 0xC7, 0x21, 0x04, 0x8C, 0x39, 0xC3, 0x85, 0xF4
.byte 0x6C, 0xF2, 0x9C, 0x12, 0x97, 0x02, 0x8E, 0x64, 0x01, 0x23, 0x29, 0xC9, 0xD9, 0xA5, 0x4E, 0x6C
.byte 0xF4, 0x68, 0xA8, 0x04, 0xFF, 0x6C, 0x2B, 0xC7, 0x8D, 0x2F, 0x54, 0xC7, 0xF2, 0xD9, 0xBB, 0x5F
.byte 0xCB, 0x57, 0x71, 0x63, 0x5A, 0x00, 0xC8, 0x5B, 0x24, 0xF2, 0x25, 0xFD, 0x97, 0x73, 0x69, 0x8C
.byte 0xDC, 0x11, 0x91, 0xDB, 0x7E, 0xBC, 0xA3, 0x0C, 0xEB, 0xF7, 0xD3, 0xDE, 0xD0, 0x8F, 0x3D, 0x9C
.byte 0xE7, 0xAF, 0x00, 0x41, 0xB0, 0xC8, 0x9C, 0xD4, 0xBA, 0xC1, 0xD1, 0x52, 0x35, 0x3B, 0xDE, 0x11
.byte 0x4D, 0x6F, 0xED, 0xCB, 0x2C, 0x90, 0xD7, 0x17, 0x87, 0xAB, 0xF5, 0x58, 0x3A, 0x33, 0xF4, 0x21
.byte 0xE2, 0xF4, 0x62, 0x92, 0xBD, 0xFF, 0x67, 0x77, 0xC1, 0x38, 0xC9, 0xF7, 0x74, 0xA8, 0x09, 0xC1
.byte 0x18, 0xF7, 0x8D, 0x44, 0x87, 0x64, 0x5B, 0x0F, 0x10, 0x51, 0x67, 0x4A, 0x84, 0x5C, 0x6C, 0x67
.byte 0x51, 0xCF, 0xFA, 0x0E, 0xCF, 0x61, 0x86, 0x91, 0x9A, 0x4F, 0x88, 0x0E, 0xF8, 0x92, 0xCF, 0x10
.byte 0x89, 0x5D, 0x54, 0x10, 0xC1, 0xB0, 0x20, 0xD2, 0x02, 0x87, 0x1D, 0x86, 0xE3, 0x89, 0xEE, 0x35
.byte 0x59, 0xE8, 0x43, 0x28, 0x49, 0xC9, 0xB9, 0xE4, 0x19, 0x42, 0xF2, 0x12, 0xD5, 0xC2, 0x22, 0x5E
.byte 0x1F, 0x77, 0x6F, 0xE1, 0x28, 0x8F, 0xB3, 0x2A, 0x16, 0xD1, 0xB0, 0xFA, 0x5A, 0x9E, 0x2F, 0xB4
.byte 0x87, 0x73, 0xDD, 0xD1, 0x3D, 0x97, 0xB5, 0x56, 0xD9, 0xA8, 0x69, 0xAE, 0x6B, 0x8B, 0x0D, 0x8A
.byte 0x03, 0x7C, 0x6C, 0x2B, 0x0B, 0x20, 0x55, 0x22, 0xF1, 0x06, 0x1D, 0x4C, 0xA5, 0x4D, 0x00, 0x2C
.byte 0xC0, 0xDD, 0xFD, 0xFE, 0x74, 0xB3, 0x55, 0x4E, 0x5C, 0xBE, 0xFD, 0xC7, 0x49, 0x0A, 0x52, 0x4C
.byte 0x87, 0xBE, 0x78, 0x92, 0xDF, 0xCD, 0xB5, 0xD0, 0xD4, 0xD2, 0x1D, 0x79, 0x1F, 0x1E, 0xA5, 0xE0
.byte 0xFB, 0xA3, 0xDE, 0x70, 0x57, 0x33, 0xBF, 0xB3, 0xF1, 0xBD, 0x7A, 0x3B, 0xC8, 0xCC, 0x88, 0x4F
.byte 0x8B, 0x00, 0xE2, 0x6A, 0xCE, 0x97, 0x3B, 0xA2, 0x69, 0x58, 0x1B, 0x89, 0x76, 0xC1, 0x69, 0x72
.byte 0x65, 0x47, 0xE3, 0xBD, 0x7B, 0xA3, 0x70, 0x6C, 0x60, 0xEB, 0xA7, 0x28, 0xB8, 0x2F, 0x78, 0x44
.byte 0x30, 0x5A, 0xAE, 0xFE, 0xF2, 0xEA, 0xA0, 0x5B, 0x43, 0xBC, 0xE5, 0xBA, 0x7D, 0x4E, 0x2D, 0xE3
.byte 0x96, 0x10, 0xA0, 0x11, 0xB4, 0x10, 0x7E, 0x14, 0xFC, 0x26, 0x3D, 0xB4, 0x55, 0xB5, 0xF9, 0x86
.byte 0x10, 0xA8, 0x84, 0x02, 0x92, 0x25, 0x5E, 0xD6, 0xE1, 0x43, 0x90, 0x5F, 0x92, 0xBD, 0x42, 0x28
.byte 0xCE, 0xE2, 0x3A, 0x82, 0xF3, 0xB9, 0x97, 0xF0, 0xDF, 0xD4, 0xA5, 0x35, 0x8A, 0x9E, 0xBB, 0x9A
.byte 0x46, 0x3F, 0x9D, 0xD8, 0x64, 0xFB, 0xAE, 0x46, 0x3E, 0x3F, 0xA5, 0xD0, 0xFC, 0xE7, 0xF9, 0xCB
.byte 0xCA, 0x34, 0x4D, 0xBD, 0xED, 0xE4, 0xAE, 0xCC, 0xB9, 0x53, 0x02, 0x43, 0xF1, 0xBD, 0xDE, 0x37
.byte 0xFD, 0x7B, 0x10, 0x62, 0x76, 0xBE, 0xA8, 0xB4, 0xFE, 0x4E, 0x85, 0xFA, 0x35, 0x7F, 0xC5, 0x00
.byte 0xB3, 0x13, 0xBE, 0xA1, 0xF7, 0x6C, 0x6D, 0xB1, 0xBF, 0x70, 0xF4, 0xB0, 0x2D, 0xD2, 0xE7, 0x2B
.byte 0x4E, 0xF7, 0x8D, 0xC4, 0xB6, 0x36, 0x79, 0xB4, 0x84, 0xFF, 0xAF, 0xBA, 0x7E, 0x75, 0xBB, 0x31
.byte 0x89, 0x79, 0xD2, 0x81, 0xE5, 0x40, 0x32, 0xA5, 0xB1, 0x26, 0x55, 0xDE, 0xF9, 0x3D, 0x0A, 0x47
.byte 0x35, 0x98, 0x0C, 0xEC, 0xCE, 0x85, 0xA1, 0x53, 0x85, 0x51, 0x0E, 0x03, 0xC6, 0xC9, 0x35, 0x50
.byte 0x43, 0x08, 0xD1, 0x29, 0x49, 0x03, 0xCE, 0xFA, 0x2A, 0x24, 0xD9, 0x24, 0x61, 0xE3, 0x6C, 0x97
.byte 0x7B, 0x78, 0x83, 0x4A, 0xFE, 0x24, 0x9E, 0x83, 0x75, 0xAD, 0x86, 0x3C, 0x77, 0xBC, 0x8C, 0xBA
.byte 0xC4, 0x5D, 0xE4, 0x0D, 0x61, 0xB2, 0x07, 0x8B, 0xD6, 0xE0, 0xB0, 0x38, 0xC4, 0x1C, 0xCF, 0x40
.byte 0x94, 0x52, 0x8B, 0x93, 0x76, 0x29, 0x17, 0xEC, 0xD7, 0x9E, 0x29, 0x4E, 0x5A, 0xB5, 0x09, 0x1E
.byte 0x13, 0xED, 0x2C, 0x74, 0x9F, 0x33, 0x00, 0x76, 0x14, 0xB1, 0xAE, 0xD9, 0xCD, 0x7D, 0x19, 0x62
.byte 0xD0, 0xA4, 0xF5, 0x47, 0xCE, 0x0C, 0x33, 0xA5, 0xAA, 0x5C, 0xF3, 0x05, 0x12, 0xFD, 0x23, 0x25
.byte 0xEA, 0x50, 0x9A, 0x8A, 0x84, 0x9B, 0x01, 0x98, 0x4C, 0xAF, 0x72, 0x1A, 0x2D, 0x8B, 0x7C, 0xFD
.byte 0x30, 0x72, 0x44, 0xFE, 0x7F, 0x78, 0xA3, 0x2A, 0xD4, 0x97, 0x2F, 0xE7, 0x94, 0x53, 0x0D, 0x7F
.byte 0xA4, 0xA8, 0x09, 0x28, 0x43, 0x0A, 0xC1, 0x90, 0xBA, 0x33, 0xAB, 0xE7, 0xBE, 0x28, 0xE5, 0xEE
.byte 0x9A, 0x29, 0xEC, 0x1A, 0xA1, 0x90, 0x45, 0x76, 0x27, 0x75, 0x5E, 0xBC, 0xC8, 0x6B, 0x3B, 0x6D
.byte 0x13, 0x45, 0x95, 0x57, 0x50, 0x56, 0xE8, 0x0A, 0x89, 0x93, 0xF2, 0x48, 0xBB, 0xD7, 0x37, 0x56
.byte 0x01, 0x24, 0x70, 0xA3, 0xB4, 0xB5, 0x19, 0xDC, 0x2B, 0x78, 0x98, 0xF3, 0xE3, 0xD4, 0x60, 0xF6
.byte 0x19, 0xF6, 0x4E, 0x69, 0x4C, 0x36, 0x74, 0xD6, 0xC9, 0x66, 0x1E, 0x85, 0x3E, 0x56, 0xDB, 0x3F
.byte 0x7A, 0x4B, 0xE2, 0x2F, 0x01, 0xFC, 0x0B, 0x2C, 0x74, 0xA4, 0x20, 0x58, 0x78, 0x81, 0x4E, 0x92
.byte 0x78, 0x9D, 0xFC, 0xC4, 0xD3, 0x70, 0x9A, 0x9D, 0xD7, 0xB9, 0x22, 0x16, 0x0F, 0xFD, 0x55, 0x89
.byte 0x49, 0x38, 0xB8, 0x4B, 0x35, 0xC4, 0x78, 0xA9, 0x69, 0x99, 0x01, 0xE1, 0x1A, 0x50, 0x74, 0x92
.byte 0xED, 0x70, 0x57, 0xC1, 0xE1, 0xF2, 0x5E, 0xB9, 0xAB, 0x80, 0xCF, 0xBB, 0x7D, 0x25, 0x44, 0xC7
.byte 0x5D, 0xFD, 0x12, 0x92, 0xC2, 0x8A, 0x3C, 0x2B, 0x23, 0x3E, 0x0D, 0x3E, 0x8F, 0x81, 0xD1, 0x7D
.byte 0xF2, 0x29, 0x3E, 0xD4, 0x1B, 0x9C, 0x8D, 0xC7, 0x1C, 0x5D, 0x82, 0x9A, 0x82, 0xC7, 0x61, 0xE0
.byte 0xC5, 0x73, 0x73, 0x87, 0xFE, 0xAF, 0xB2, 0x22, 0xEE, 0xC0, 0x60, 0x7D, 0x41, 0x32, 0xFA, 0x34
.byte 0x5B, 0x39, 0x08, 0x76, 0xD5, 0x95, 0x3E, 0xF2, 0xF2, 0xC0, 0x8C, 0x74, 0x87, 0xEE, 0x55, 0x4C
.byte 0x62, 0xC8, 0xD4, 0x60, 0x77, 0x87, 0x82, 0x66, 0x47, 0xE3, 0xE4, 0x89, 0x15, 0xDF, 0xBD, 0x71
.byte 0x18, 0xC5, 0xE8, 0xED, 0x5A, 0x26, 0xE0, 0x4D, 0xE6, 0x6D, 0xC2, 0x6E, 0x5B, 0x17, 0xBB, 0xBD
.byte 0xDF, 0x8F, 0x1E, 0x57, 0x16, 0xA1, 0xBE, 0x5D, 0x84, 0xA2, 0xE7, 0x9A, 0x81, 0xA4, 0x0B, 0x99
.byte 0x69, 0xF4, 0x87, 0xC4, 0x1A, 0x68, 0x11, 0x01, 0xD5, 0xD4, 0x6F, 0x30, 0xEC, 0x2B, 0xEE, 0xCB
.byte 0xBA, 0x0C, 0x23, 0xD1, 0xAD, 0xE1, 0x2F, 0x32, 0x84, 0x16, 0xCC, 0x05, 0xBA, 0xD8, 0x9F, 0x24
.byte 0xCC, 0x27, 0xE8, 0xE7, 0x8F, 0xFA, 0xE8, 0x65, 0xCE, 0x58, 0x95, 0xBA, 0x83, 0x84, 0x86, 0x3E
.byte 0x90, 0xAA, 0x0F, 0x3E, 0x8C, 0x3F, 0x70, 0x10, 0x55, 0x3C, 0x16, 0x10, 0x15, 0xB6, 0x34, 0xE1
.byte 0xDE, 0x1C, 0xC8, 0x6D, 0x16, 0xB1, 0xD3, 0xE5, 0x09, 0x68, 0xA0, 0x8D, 0xEC, 0x26, 0xCB, 0x7D
.byte 0xD1, 0xDB, 0xBB, 0x5D, 0x1A, 0x2C, 0x6E, 0x70, 0x69, 0x84, 0x80, 0x7E, 0x3B, 0xB4, 0x60, 0x19
.byte 0xD1, 0x28, 0x87, 0xE8, 0xDA, 0x5A, 0xCD, 0xE3, 0xC3, 0x6E, 0x71, 0xB0, 0x94, 0x3C, 0x2E, 0x66
.byte 0x18, 0xE9, 0xC3, 0x33, 0x16, 0x31, 0xA3, 0x7F, 0xB6, 0x24, 0xFE, 0xF2, 0xD9, 0x5E, 0x0B, 0xAA
.byte 0x87, 0x93, 0x92, 0x61, 0xED, 0x60, 0x45, 0xB1, 0xCE, 0xB6, 0x61, 0x63, 0xF3, 0x8F, 0xC9, 0x0B
.byte 0x79, 0x8D, 0x3E, 0x8F, 0xBE, 0xE2, 0x0F, 0x75, 0x07, 0x0D, 0x67, 0xE0, 0x6B, 0x73, 0x8A, 0xF2
.byte 0x06, 0x1D, 0x54, 0xF4, 0x7D, 0x99, 0xA5, 0x4C, 0x4F, 0x07, 0xAF, 0x42, 0x96, 0x79, 0x4E, 0x10
.byte 0x06, 0x8D, 0xA0, 0xC5, 0x6F, 0xAF, 0x3B, 0x77, 0xBD, 0xA2, 0x57, 0x29, 0x15, 0xE1, 0x1B, 0x1C
.byte 0xFF, 0x70, 0x10, 0x7D, 0x09, 0xB5, 0xC9, 0x58, 0xBC, 0x79, 0x9B, 0x53, 0xF3, 0xE9, 0x63, 0xF9
.byte 0x76, 0x04, 0xBF, 0xE6, 0xB4, 0xFA, 0x5D, 0x71, 0x9D, 0xB4, 0x9A, 0xB3, 0x96, 0xB6, 0xCF, 0x96
.byte 0x26, 0xDF, 0x13, 0x30, 0x94, 0xDD, 0x88, 0x51, 0x56, 0x24, 0xA4, 0x4A, 0x0D, 0x08, 0x44, 0x84
.byte 0x0D, 0x03, 0x6B, 0xC1, 0xFE, 0xC8, 0x32, 0x9B, 0x7D, 0xCD, 0x4E, 0x14, 0x84, 0x1D, 0xAA, 0xAB
.byte 0xFD, 0xBE, 0xDB, 0x92, 0x9B, 0x64, 0xE3, 0xF2, 0x88, 0x88, 0x3C, 0x96, 0x91, 0x80, 0x1A, 0x9E
.byte 0x84, 0x86, 0x5F, 0x82, 0x4F, 0x92, 0x1E, 0xCC, 0x5F, 0x6D, 0xE1, 0xE4, 0x8B, 0x8C, 0x8F, 0x88
.byte 0x4A, 0x6B, 0x1A, 0xE5, 0xCF, 0xFD, 0xD7, 0x58, 0x86, 0x14, 0xEE, 0x17, 0x94, 0x09, 0xB5, 0x19
.byte 0x8F, 0x14, 0x9C, 0xDE, 0xA6, 0xBA, 0xAB, 0x06, 0x28, 0x8D, 0xEB, 0xB3, 0x19, 0x7A, 0x3B, 0x63
.byte 0xE6, 0x56, 0x49, 0xB5, 0x54, 0x20, 0x0E, 0xDA, 0x34, 0xFC, 0xF1, 0xC9, 0x06, 0xA7, 0xE2, 0x96
.byte 0xBB, 0x7E, 0x74, 0x62, 0x39, 0x20, 0x69, 0x61, 0xAD, 0x54, 0x14, 0xC6, 0xCF, 0x50, 0x2A, 0xB5
.byte 0xA6, 0x73, 0x6B, 0xFA, 0x93, 0x79, 0xD5, 0xC8, 0x76, 0xC6, 0x92, 0x7C, 0x6D, 0x74, 0x12, 0x29
.byte 0xF3, 0x87, 0x8C, 0x2D, 0xA7, 0xF5, 0x8E, 0x55, 0x49, 0xA3, 0x1B, 0x18, 0xF3, 0x45, 0xCD, 0x9A
.byte 0xB8, 0x38, 0x95, 0x4C, 0xB1, 0x6A, 0x15, 0x28, 0x31, 0xA7, 0xA5, 0x9F, 0x1C, 0xB7, 0xC9, 0x0F
.byte 0x3F, 0x55, 0x3C, 0xE7, 0x4A, 0xCB, 0x3C, 0x93, 0x6E, 0x57, 0xAC, 0x62, 0x9D, 0x7A, 0xFC, 0x56
.byte 0xB2, 0x91, 0xA2, 0x64, 0xFC, 0xB7, 0x8C, 0x2D, 0x5F, 0x32, 0xCC, 0x7B, 0xE9, 0x95, 0x8B, 0x29
.byte 0xEB, 0xC8, 0x10, 0x35, 0x93, 0x4D, 0xC9, 0x01, 0xA5, 0x75, 0x63, 0x42, 0xEF, 0x60, 0x99, 0xA2
.byte 0xF1, 0x3C, 0x07, 0xED, 0xF4, 0x94, 0x1B, 0x53, 0xC6, 0xE8, 0xCE, 0xB0, 0x7E, 0x5A, 0xD9, 0x69
.byte 0x22, 0xEA, 0x9E, 0xB5, 0x38, 0x68, 0xB6, 0xDD, 0xDE, 0x1A, 0x20, 0xCE, 0x7A, 0xB9, 0x70, 0x6C
.byte 0xF5, 0x78, 0x5A, 0xE9, 0x0C, 0x75, 0x3D, 0xD2, 0x5D, 0x0C, 0x83, 0xDC, 0x66, 0x5D, 0x45, 0x88
.byte 0x47, 0xE4, 0x3D, 0x80, 0x4C, 0xF4, 0x5D, 0x2A, 0x0E, 0x7E, 0xF8, 0x89, 0x38, 0x69, 0xF6, 0x2E
.byte 0xE1, 0x50, 0x18, 0xED, 0xC6, 0x55, 0xC0, 0x24, 0x61, 0x43, 0x00, 0xC7, 0xA0, 0x45, 0x50, 0xE8
.byte 0x2A, 0x8D, 0x69, 0x76, 0x81, 0xC7, 0xA1, 0x90, 0x45, 0x9A, 0x1A, 0x7E, 0x04, 0x10, 0xAC, 0xE5
.byte 0x61, 0xC5, 0xD3, 0x27, 0x1B, 0x94, 0x4C, 0x7C, 0xD8, 0x4C, 0x44, 0x79, 0x92, 0x94, 0x61, 0xBC
.byte 0x22, 0xCA, 0x33, 0xA3, 0x92, 0xD5, 0x34, 0xD7, 0x6F, 0x4F, 0x55, 0x73, 0x5F, 0x02, 0x59, 0xC1
.byte 0xC7, 0x2D, 0xE9, 0xE2, 0xC1, 0x35, 0x5F, 0x99, 0x82, 0xA4, 0x12, 0x14, 0x39, 0x74, 0xD1, 0x5B
.byte 0x3F, 0x05, 0xFF, 0xD1, 0xDA, 0x33, 0xA9, 0x4A, 0x82, 0xFF, 0xBE, 0xE2, 0x02, 0x18, 0xA4, 0xCA
.byte 0x45, 0x8D, 0xAD, 0x07, 0xC2, 0x0C, 0xA0, 0x45, 0xB1, 0xB3, 0x59, 0xEA, 0x28, 0x2B, 0x45, 0x67
.byte 0x31, 0x44, 0x39, 0x0C, 0x78, 0xE3, 0x57, 0xFB, 0xE2, 0x15, 0xDE, 0xE4, 0x2E, 0x82, 0xAE, 0x74
.byte 0x0F, 0x5B, 0x7B, 0xD2, 0x68, 0x1C, 0x17, 0x19, 0xCF, 0x71, 0x04, 0xF8, 0x9D, 0x49, 0x60, 0xCE
.byte 0x8E, 0x99, 0xDA, 0x07, 0x7C, 0x31, 0x02, 0x5F, 0x47, 0xE1, 0x43, 0x75, 0x63, 0xF2, 0xE9, 0x72
.byte 0x4D, 0x65, 0x44, 0xB6, 0x81, 0x5C, 0xCF, 0x51, 0xCD, 0xD3, 0x49, 0x6A, 0x1D, 0xA9, 0x39, 0xAC
.byte 0x43, 0x13, 0xB3, 0xC0, 0x45, 0xB6, 0x1F, 0x8D, 0x97, 0x63, 0x03, 0xFB, 0x55, 0xED, 0x6D, 0xA3
.byte 0x52, 0xB2, 0x59, 0xD3, 0x0F, 0x29, 0x24, 0xDC, 0xFD, 0x6E, 0x47, 0x1B, 0x18, 0x80, 0xC7, 0x5B
.byte 0x94, 0x7B, 0x1C, 0xDA, 0x32, 0x3C, 0x67, 0xCA, 0x9F, 0x6A, 0xC5, 0xF5, 0x58, 0x33, 0x99, 0xAA
.byte 0xE6, 0xF3, 0x7E, 0xF5, 0x1C, 0xA3, 0xD2, 0x1A, 0x11, 0x1A, 0x35, 0x29, 0x9B, 0xFD, 0x85, 0x30
.byte 0x78, 0xA2, 0x0A, 0xAB, 0xDE, 0x72, 0x76, 0x7E, 0xDD, 0x3B, 0x74, 0x35, 0x6F, 0x0D, 0xDF, 0x55
.byte 0x00, 0x5D, 0x4B, 0x1D, 0x00, 0x1E, 0x37, 0x12, 0x38, 0x6D, 0x3C, 0xD3, 0x6A, 0xC2, 0x03, 0xE3
.byte 0x64, 0x0E, 0x8E, 0x43, 0x80, 0x05, 0xC1, 0x5D, 0x40, 0x36, 0x93, 0xB0, 0x43, 0x73, 0x06, 0x44
.byte 0xD1, 0x52, 0x61, 0xD2, 0x70, 0x99, 0xE4, 0xA8, 0x06, 0x21, 0x7C, 0x71, 0xE3, 0x80, 0x54, 0x48
.byte 0x8E, 0xE3, 0x8B, 0x0F, 0xE8, 0x4D, 0x6D, 0x29, 0x83, 0x00, 0xD9, 0xC6, 0x73, 0xE0, 0x0B, 0x45
.byte 0x32, 0x6D, 0x17, 0xA2, 0x06, 0xFB, 0x4B, 0x0D, 0x1D, 0xC7, 0x7E, 0x00, 0x48, 0xD2, 0x48, 0xD6
.byte 0xB6, 0xD3, 0xE5, 0x9E, 0x21, 0x52, 0xC7, 0xA4, 0x52, 0xA1, 0x6B, 0xC6, 0x81, 0x76, 0x0B, 0xB3
.byte 0xE3, 0x22, 0x56, 0xEA, 0x1E, 0xA1, 0xF8, 0x3B, 0x69, 0x76, 0x3C, 0xB1, 0x49, 0x84, 0x87, 0xFF
.byte 0x58, 0x6D, 0x9E, 0x79, 0xBF, 0x65, 0x1E, 0x12, 0x07, 0x89, 0xD9, 0x88, 0xFF, 0xE4, 0x3C, 0xE3
.byte 0x07, 0x92, 0xCD, 0x26, 0x33, 0xC5, 0x62, 0x9D, 0x3C, 0x9E, 0x4E, 0x86, 0x23, 0xD6, 0x86, 0x7C
.byte 0x43, 0x24, 0xF6, 0x02, 0x8A, 0x15, 0x15, 0x91, 0x9E, 0xEE, 0x19, 0x9E, 0xD3, 0x56, 0x81, 0xDB
.byte 0xE8, 0x4F, 0x01, 0x1C, 0x14, 0x64, 0xB9, 0x51, 0x03, 0x07, 0xD7, 0x27, 0xDD, 0x5D, 0xA4, 0x21
.byte 0x82, 0x9A, 0x24, 0x0C, 0xAF, 0x39, 0x9D, 0x4E, 0x28, 0xB7, 0xEC, 0xFB, 0x0D, 0x6D, 0xD6, 0xF6
.byte 0xBC, 0xD8, 0x12, 0xD1, 0x3C, 0xCB, 0x23, 0x40, 0xD3, 0xFB, 0x67, 0xB1, 0x58, 0x0B, 0xD2, 0xDA
.byte 0xA6, 0xF6, 0xE7, 0x56, 0x30, 0x85, 0xA4, 0x58, 0x3C, 0x90, 0x54, 0x4A, 0xFE, 0x2A, 0x41, 0xBA
.byte 0x03, 0x53, 0x8C, 0x3F, 0x1F, 0xAF, 0x7F, 0xF2, 0xAA, 0xE7, 0xA3, 0x03, 0xF2, 0x76, 0xDE, 0x98
.byte 0x6C, 0xC6, 0xEE, 0x9D, 0x4B, 0x93, 0xF5, 0x88, 0x23, 0x49, 0xD2, 0x22, 0x74, 0x14, 0xDD, 0x77
.byte 0x67, 0x69, 0xB7, 0x86, 0x19, 0x37, 0x78, 0xC4, 0x1E, 0x1C, 0xC8, 0x11, 0x92, 0xA7, 0xAA, 0xFF
.byte 0x6D, 0x99, 0x9D, 0xB8, 0x2C, 0x93, 0x40, 0x50, 0xDC, 0x13, 0x72, 0x51, 0x27, 0x4F, 0xC8, 0x8F
.byte 0xB8, 0x80, 0x15, 0xD2, 0xB7, 0x8E, 0x97, 0xD6, 0xAB, 0x5F, 0xE7, 0x3E, 0x06, 0x91, 0x3E, 0x74
.byte 0x2A, 0xDB, 0x2D, 0x57, 0x6E, 0x6D, 0xA7, 0x4B, 0x81, 0x19, 0x9C, 0xA9, 0x68, 0x65, 0x38, 0x21
.byte 0xE6, 0x4E, 0xF4, 0x9D, 0xDD, 0x8B, 0x74, 0x89, 0xEB, 0x5C, 0xC7, 0xF2, 0xED, 0x05, 0x66, 0x18
.byte 0xE1, 0x93, 0x6F, 0x4F, 0x01, 0x17, 0x9A, 0x83, 0x30, 0x37, 0x2D, 0x99, 0x9C, 0x66, 0xBB, 0x83
.byte 0xB4, 0xAF, 0x21, 0x92, 0x3B, 0x95, 0x1B, 0x26, 0xF1, 0xE3, 0x19, 0xDF, 0xE8, 0x7F, 0xF8, 0xC9
.byte 0x13, 0x68, 0x19, 0x15, 0x7F, 0xB3, 0x98, 0xB0, 0xEB, 0xC6, 0x49, 0x88, 0x2C, 0x05, 0x0B, 0xE1
.byte 0xB4, 0x2C, 0x73, 0xF0, 0xC1, 0x8F, 0x17, 0xB3, 0x72, 0x30, 0x93, 0x5B, 0xAF, 0x8B, 0x25, 0xC3
.byte 0xF3, 0x3E, 0xD8, 0x73, 0xF2, 0x71, 0x23, 0xDD, 0x37, 0x6C, 0x65, 0x64, 0x72, 0x70, 0x45, 0x26
.byte 0x9C, 0xB9, 0x17, 0x5E, 0x48, 0x2E, 0x12, 0xBB, 0x5E, 0xA5, 0x17, 0x0E, 0x30, 0x3C, 0xD1, 0x24
.byte 0x7B, 0xAA, 0x97, 0x6D, 0x1B, 0xBA, 0x4A, 0x53, 0x27, 0xB0, 0xB7, 0x99, 0x21, 0xFD, 0xC0, 0xBE
.byte 0xB6, 0xD8, 0x1C, 0xFF, 0x06, 0x2E, 0xBB, 0x64, 0xD3, 0xD2, 0x72, 0x04, 0x0F, 0x44, 0x28, 0x8A
.byte 0xEE, 0xC0, 0xF7, 0x0A, 0x7B, 0x42, 0x5E, 0xA3, 0xF3, 0x16, 0x3D, 0x14, 0x13, 0xFD, 0xD2, 0xC9
.byte 0xD6, 0xEF, 0xC9, 0xDC, 0x1E, 0x84, 0x40, 0xF2, 0x57, 0xB3, 0xF6, 0x66, 0xF7, 0x1F, 0xF0, 0xE6
.byte 0xE0, 0xE8, 0xF1, 0x5B, 0x2B, 0x4F, 0xFE, 0x1E, 0x65, 0x3B, 0x33, 0x78, 0x39, 0x06, 0x42, 0x0F
.byte 0xF6, 0x0B, 0xEC, 0x14, 0x90, 0x2C, 0x07, 0xE7, 0xE0, 0xFE, 0x4D, 0xD8, 0x1D, 0x3E, 0xBE, 0xFE
.byte 0x27, 0xB0, 0x59, 0x52, 0xFF, 0x58, 0x71, 0x65, 0x94, 0xA5, 0xDD, 0xCD, 0xAC, 0x20, 0xDD, 0xA2
.byte 0x2C, 0xC9, 0xB7, 0xBC, 0xF6, 0xBE, 0xA4, 0xD7, 0xBC, 0xF1, 0xAF, 0xDA, 0x30, 0x6E, 0xD8, 0x57
.byte 0x1E, 0x32, 0xAA, 0x1E, 0x8A, 0x1B, 0x83, 0x1E, 0xC1, 0x61, 0xEC, 0x6D, 0x81, 0xCA, 0x0F, 0xAD
.byte 0x94, 0xC6, 0x6A, 0x8B, 0x85, 0x0E, 0x62, 0x42, 0x00, 0x12, 0x1C, 0x30, 0x80, 0xF5, 0x88, 0x9F
.byte 0x27, 0x32, 0xBD, 0xB1, 0x4E, 0x40, 0xD0, 0x0F, 0xA1, 0xBC, 0x7C, 0x23, 0x87, 0x8C, 0xD1, 0x1B
.byte 0x53, 0x3B, 0xA6, 0xD8, 0x4A, 0x09, 0x1A, 0x4A, 0x1B, 0x37, 0x7B, 0x9B, 0x2C, 0x03, 0x3A, 0x53
.byte 0x36, 0xF7, 0x05, 0x84, 0x38, 0xD5, 0x94, 0xD9, 0x92, 0x11, 0xFD, 0x19, 0x9D, 0xCE, 0x35, 0xF1
.byte 0x0A, 0xDC, 0xCA, 0x54, 0xE5, 0xE5, 0x9F, 0x01, 0x1C, 0x1B, 0x9C, 0x49, 0x1E, 0xD7, 0x9D, 0x55
.byte 0xCF, 0xA2, 0xD9, 0x07, 0x78, 0x6E, 0xE1, 0x0B, 0x7F, 0xDF, 0x25, 0x1C, 0xAD, 0x5A, 0x0E, 0xB7
.byte 0x37, 0xD8, 0x0C, 0x1C, 0xBD, 0xAB, 0x1E, 0xDA, 0xC6, 0xBA, 0x23, 0xE5, 0x92, 0xC0, 0x3A, 0x61
.byte 0x63, 0x14, 0x69, 0xDB, 0x82, 0x4B, 0xE6, 0x02, 0x2A, 0x0B, 0x1F, 0xD8, 0x66, 0x2D, 0x90, 0x9D
.byte 0x05, 0x9C, 0xBA, 0xC3, 0x48, 0xD8, 0x9D, 0x0E, 0x93, 0xC1, 0xF4, 0x25, 0x81, 0x2F, 0x87, 0xE5
.byte 0x44, 0xF1, 0xC0, 0xC7, 0x3D, 0xA7, 0xC9, 0x68, 0xB3, 0xE8, 0x40, 0x19, 0x15, 0xD0, 0xB7, 0x1B
.byte 0x6C, 0x71, 0xDE, 0xB4, 0x4A, 0x7C, 0xC3, 0xDD, 0x3D, 0xB8, 0x03, 0xBF, 0xE8, 0x8A, 0xA4, 0x2C
.byte 0x7C, 0x64, 0xF3, 0xB9, 0x0C, 0xBD, 0x21, 0xBF, 0xA5, 0x62, 0xD8, 0xBB, 0x32, 0x8F, 0xD6, 0x9F
.byte 0x01, 0xB5, 0x54, 0x4B, 0x31, 0x18, 0x29, 0x6E, 0xD1, 0x2C, 0x2D, 0xB9, 0xB7, 0xD1, 0xE6, 0x34
.byte 0x36, 0xDA, 0xED, 0x43, 0x97, 0x0F, 0x02, 0x3D, 0x72, 0xDB, 0xF8, 0xA5, 0x6B, 0xCF, 0x45, 0x6C
.byte 0x84, 0x99, 0xB8, 0xB5, 0xB2, 0xE2, 0x23, 0x84, 0x0E, 0x51, 0x3D, 0xC6, 0x23, 0x24, 0xFA, 0x5A
.byte 0xFE, 0xE8, 0x9D, 0x96, 0xF8, 0x9F, 0xD3, 0x6A, 0x7B, 0xCC, 0x0F, 0xE6, 0x9B, 0x54, 0x53, 0x1F
.byte 0xEE, 0x0C, 0xD5, 0xA1, 0xEE, 0xF9, 0x25, 0xFC, 0x4A, 0x63, 0xC3, 0x6E, 0x87, 0xBD, 0xC8, 0x86
.byte 0xA6, 0x65, 0x1C, 0x9E, 0x05, 0xF0, 0x08, 0x81, 0xBC, 0x18, 0x67, 0x58, 0x6D, 0xBB, 0x77, 0x5B
.byte 0xC7, 0x4D, 0xFD, 0xB6, 0x46, 0x22, 0xB2, 0x91, 0x85, 0x76, 0x00, 0x0D, 0x34, 0xC8, 0x93, 0xDA
.byte 0x2E, 0xAF, 0x78, 0x34, 0x9F, 0x81, 0xB5, 0x5C, 0x9A, 0x1D, 0xB4, 0x07, 0xD9, 0x2C, 0x63, 0xA0
.byte 0x79, 0x61, 0x56, 0xC0, 0x83, 0x09, 0x51, 0x09, 0x80, 0x52, 0x17, 0xB4, 0x1A, 0xAA, 0x8E, 0x49
.byte 0x5A, 0x07, 0x7D, 0xFA, 0x89, 0x33, 0x56, 0x24, 0x50, 0x0A, 0x2C, 0x29, 0x36, 0x90, 0xCA, 0xB0
.byte 0xF1, 0x21, 0x70, 0x74, 0x2B, 0xC2, 0x7E, 0xAB, 0x14, 0x95, 0x60, 0x2F, 0x40, 0xEF, 0x78, 0x9A
.byte 0xF7, 0xF6, 0x95, 0x81, 0x29, 0xEB, 0xA5, 0x79, 0xF6, 0xD1, 0xA3, 0x2D, 0x61, 0x6E, 0xDD, 0x52
.byte 0x90, 0x4E, 0xC7, 0xBB, 0x11, 0x46, 0x67, 0x25, 0xDC, 0xC8, 0x55, 0x1C, 0xB7, 0xCD, 0xB7, 0xAE
.byte 0xC4, 0x4C, 0x2F, 0xED, 0x38, 0xD5, 0x67, 0x2E, 0xA6, 0x0A, 0x5B, 0x08, 0x79, 0x38, 0x5B, 0x09
.byte 0x87, 0x23, 0xC4, 0x98, 0x69, 0x2C, 0xBE, 0x46, 0xF4, 0x13, 0x63, 0xAC, 0xE1, 0x1A, 0x5B, 0xA5
.byte 0x67, 0x8A, 0x93, 0x9F, 0x60, 0xFA, 0xCD, 0x07, 0x04, 0x29, 0x0F, 0x7D, 0x62, 0x6B, 0x87, 0xE9
.byte 0x8E, 0x4C, 0x82, 0xF8, 0x78, 0x40, 0x3F, 0x6D, 0x54, 0xA2, 0x19, 0x36, 0xBC, 0x74, 0xDC, 0x24
.byte 0xFF, 0x6F, 0xC3, 0x5F, 0x69, 0x91, 0x66, 0x6E, 0xBB, 0x76, 0xEC, 0x1D, 0xE1, 0x73, 0x07, 0x70
.byte 0xBF, 0x89, 0x69, 0x38, 0xCA, 0xA8, 0xA5, 0x1E, 0x4A, 0xBF, 0x55, 0x07, 0x34, 0x31, 0x2B, 0x34
.byte 0xA0, 0xEF, 0x93, 0x0A, 0x81, 0xFA, 0x79, 0x3C, 0x71, 0x65, 0x5A, 0x52, 0xD9, 0x61, 0xC3, 0x99
.byte 0xEB, 0x2C, 0xD1, 0xB5, 0xD5, 0x77, 0xD4, 0x20, 0x37, 0x29, 0x27, 0x6B, 0x5A, 0x53, 0x9F, 0xFB
.byte 0x43, 0x33, 0x06, 0xC4, 0x2D, 0x7F, 0x01, 0x9F, 0xE4, 0x5C, 0xF1, 0xBE, 0xBD, 0xB5, 0x57, 0xA9
.byte 0xE2, 0x29, 0x5E, 0xB7, 0xA1, 0x32, 0xD7, 0xD8, 0x5C, 0xFF, 0x43, 0xB6, 0x53, 0xE3, 0xB2, 0x96
/firmware/test019.asm
1,35 → 1,35
/*
* This test verifies non-returnable interrupt handling
* Note: "iret" is never called here
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lcs r105, success
lcs r32, 0 // counter
lcs iv0, test_loop@1 // set IRF to mark the interrupt as non-returnable
mov cr, 1 // enable timer interrupt
sw r104, 100 // delay between interrupts
sw r103, 100 // generate 100 interrupts
hlt // wait for a non-returnable interrupt
test_loop:
add r32, r32, 1
cjmpuge r105, r32, 100 // success
hlt // wait for a non-returnable interrupt
failure:
sw r100, 2 // should never reach here
jmp r101 // halt
success:
sw r100, 1 // success
halt:
hlt
jmp r101 // halt
/*
* This test verifies non-returnable interrupt handling
* Note: "iret" is never called here
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lc r102, failure
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite)
lc r104, 0x20000004 // timer: delay between pulses (in cycles)
lcs r105, success
lcs r32, 0 // counter
lcs iv0, test_loop@1 // set IRF to mark the interrupt as non-returnable
mov cr, 1 // enable timer interrupt
sw r104, 100 // delay between interrupts
sw r103, 100 // generate 100 interrupts
hlt // wait for a non-returnable interrupt
test_loop:
add r32, r32, 1
cjmpuge r105, r32, 100 // success
hlt // wait for a non-returnable interrupt
failure:
sw r100, 2 // should never reach here
jmp r101 // halt
success:
sw r100, 1 // success
halt:
hlt
jmp r101 // halt
/firmware/test020.asm
1,39 → 1,39
/*
* Check that there are no pipeline hazards
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lcs r102, failure
lcs r103, success
add r0, 100, 50 // r0:=150
add r1, r0, 3 // r1:=153, potential RAW hazard
mul r2, r1, 109 // r2:=16677, potential RAW hazard
mul r3, r2, r0 // r3:=2501550, potential RAW hazard
sub r4, r3, 15 // r4:=2501535, potential RAW hazard
mul r5, 50, 117 // r2:=5850
sub r5, 100, 9 // r2:=91, overwrites previous result, potential WAW hazard
lc r6, 1800
mul r7, r6, 49 // r7:=88200, potential RAW hazard
mov r6, 1 // r6:=1, potential WAR hazard
lc r0, 2501535
cjmpne r102, r4, r0 // failure
cjmpne r102, r5, 91 // failure
lcs r0, 88200
cjmpne r102, r7, r0 // failure
jmp r103 // success
failure:
sw r100, 2
jmp r101 // halt
success:
sw r100, 1 // success
halt:
hlt
jmp r101 // halt
/*
* Check that there are no pipeline hazards
*/
 
lc r100, 0x10000000 // test result output pointer
lcs r101, halt
lcs r102, failure
lcs r103, success
add r0, 100, 50 // r0:=150
add r1, r0, 3 // r1:=153, potential RAW hazard
mul r2, r1, 109 // r2:=16677, potential RAW hazard
mul r3, r2, r0 // r3:=2501550, potential RAW hazard
sub r4, r3, 15 // r4:=2501535, potential RAW hazard
mul r5, 50, 117 // r2:=5850
sub r5, 100, 9 // r2:=91, overwrites previous result, potential WAW hazard
lc r6, 1800
mul r7, r6, 49 // r7:=88200, potential RAW hazard
mov r6, 1 // r6:=1, potential WAR hazard
lc r0, 2501535
cjmpne r102, r4, r0 // failure
cjmpne r102, r5, 91 // failure
lcs r0, 88200
cjmpne r102, r7, r0 // failure
jmp r103 // success
failure:
sw r100, 2
jmp r101 // halt
success:
sw r100, 1 // success
halt:
hlt
jmp r101 // halt
/make/sources.make
1,80 → 1,80
# CPU RTL
 
LXP32_DIR=../../../../rtl
LXP32_RTL=$(LXP32_DIR)/lxp32_mul16x16.vhd\
$(LXP32_DIR)/lxp32_mul_dsp.vhd\
$(LXP32_DIR)/lxp32_mul_opt.vhd\
$(LXP32_DIR)/lxp32_mul_seq.vhd\
$(LXP32_DIR)/lxp32_compl.vhd\
$(LXP32_DIR)/lxp32_divider.vhd\
$(LXP32_DIR)/lxp32_shifter.vhd\
$(LXP32_DIR)/lxp32_alu.vhd\
$(LXP32_DIR)/lxp32_dbus.vhd\
$(LXP32_DIR)/lxp32_execute.vhd\
$(LXP32_DIR)/lxp32_decode.vhd\
$(LXP32_DIR)/lxp32_ubuf.vhd\
$(LXP32_DIR)/lxp32_fetch.vhd\
$(LXP32_DIR)/lxp32_ram256x32.vhd\
$(LXP32_DIR)/lxp32_interrupt_mux.vhd\
$(LXP32_DIR)/lxp32_scratchpad.vhd\
$(LXP32_DIR)/lxp32_cpu.vhd\
$(LXP32_DIR)/lxp32u_top.vhd\
$(LXP32_DIR)/lxp32_icache.vhd\
$(LXP32_DIR)/lxp32c_top.vhd
 
# Common package
 
COMMON_PKG_DIR=../../../common_pkg
COMMON_SRC=$(COMMON_PKG_DIR)/common_pkg.vhd $(COMMON_PKG_DIR)/common_pkg_body.vhd
 
# Platform RTL
 
PLATFORM_DIR=../../src/platform
PLATFORM_RTL=$(PLATFORM_DIR)/generic_dpram.vhd\
$(PLATFORM_DIR)/scrambler.vhd\
$(PLATFORM_DIR)/dbus_monitor.vhd\
$(PLATFORM_DIR)/program_ram.vhd\
$(PLATFORM_DIR)/timer.vhd\
$(PLATFORM_DIR)/coprocessor.vhd\
$(PLATFORM_DIR)/intercon.vhd\
$(PLATFORM_DIR)/ibus_adapter.vhd\
$(PLATFORM_DIR)/platform.vhd
 
# Testbench sources
 
COMMON_PKG_DIR=../../../common_pkg
TB_DIR=../../src/tb
TB_SRC=$(TB_DIR)/tb_pkg.vhd\
$(TB_DIR)/tb_pkg_body.vhd\
$(TB_DIR)/monitor.vhd\
$(TB_DIR)/tb.vhd
 
TB_MOD=tb
 
# Firmware
 
FW_SRC_DIR=../../src/firmware
FIRMWARE=test001.ram\
test002.ram\
test003.ram\
test004.ram\
test005.ram\
test006.ram\
test007.ram\
test008.ram\
test009.ram\
test010.ram\
test011.ram\
test012.ram\
test013.ram\
test014.ram\
test015.ram\
test016.ram\
test017.ram\
test018.ram\
test019.ram\
test020.ram
 
# LXP32 assembler executable
 
ASM=../../../../tools/bin/lxp32asm
# CPU RTL
 
LXP32_DIR=../../../../rtl
LXP32_RTL=$(LXP32_DIR)/lxp32_mul16x16.vhd\
$(LXP32_DIR)/lxp32_mul_dsp.vhd\
$(LXP32_DIR)/lxp32_mul_opt.vhd\
$(LXP32_DIR)/lxp32_mul_seq.vhd\
$(LXP32_DIR)/lxp32_compl.vhd\
$(LXP32_DIR)/lxp32_divider.vhd\
$(LXP32_DIR)/lxp32_shifter.vhd\
$(LXP32_DIR)/lxp32_alu.vhd\
$(LXP32_DIR)/lxp32_dbus.vhd\
$(LXP32_DIR)/lxp32_execute.vhd\
$(LXP32_DIR)/lxp32_decode.vhd\
$(LXP32_DIR)/lxp32_ubuf.vhd\
$(LXP32_DIR)/lxp32_fetch.vhd\
$(LXP32_DIR)/lxp32_ram256x32.vhd\
$(LXP32_DIR)/lxp32_interrupt_mux.vhd\
$(LXP32_DIR)/lxp32_scratchpad.vhd\
$(LXP32_DIR)/lxp32_cpu.vhd\
$(LXP32_DIR)/lxp32u_top.vhd\
$(LXP32_DIR)/lxp32_icache.vhd\
$(LXP32_DIR)/lxp32c_top.vhd
 
# Common package
 
COMMON_PKG_DIR=../../../common_pkg
COMMON_SRC=$(COMMON_PKG_DIR)/common_pkg.vhd $(COMMON_PKG_DIR)/common_pkg_body.vhd
 
# Platform RTL
 
PLATFORM_DIR=../../src/platform
PLATFORM_RTL=$(PLATFORM_DIR)/generic_dpram.vhd\
$(PLATFORM_DIR)/scrambler.vhd\
$(PLATFORM_DIR)/dbus_monitor.vhd\
$(PLATFORM_DIR)/program_ram.vhd\
$(PLATFORM_DIR)/timer.vhd\
$(PLATFORM_DIR)/coprocessor.vhd\
$(PLATFORM_DIR)/intercon.vhd\
$(PLATFORM_DIR)/ibus_adapter.vhd\
$(PLATFORM_DIR)/platform.vhd
 
# Testbench sources
 
COMMON_PKG_DIR=../../../common_pkg
TB_DIR=../../src/tb
TB_SRC=$(TB_DIR)/tb_pkg.vhd\
$(TB_DIR)/tb_pkg_body.vhd\
$(TB_DIR)/monitor.vhd\
$(TB_DIR)/tb.vhd
 
TB_MOD=tb
 
# Firmware
 
FW_SRC_DIR=../../src/firmware
FIRMWARE=test001.ram\
test002.ram\
test003.ram\
test004.ram\
test005.ram\
test006.ram\
test007.ram\
test008.ram\
test009.ram\
test010.ram\
test011.ram\
test012.ram\
test013.ram\
test014.ram\
test015.ram\
test016.ram\
test017.ram\
test018.ram\
test019.ram\
test020.ram
 
# LXP32 assembler executable
 
ASM=../../../../tools/bin/lxp32asm
/platform/coprocessor.vhd
1,97 → 1,97
---------------------------------------------------------------------
-- Coprocessor
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Performs a simple arithmetic operation, uses interrupt to wake
-- up the CPU.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity coprocessor is
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
irq_o: out std_logic
);
end entity;
 
architecture rtl of coprocessor is
 
signal value: unsigned(31 downto 0):=(others=>'0');
signal result: unsigned(31 downto 0):=(others=>'0');
signal cnt: integer range 0 to 5:=0;
signal irq: std_logic:='0';
 
begin
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
value<=(others=>'0');
cnt<=0;
irq<='0';
else
if cnt>0 then
cnt<=cnt-1;
end if;
if cnt=1 then
irq<='1';
else
irq<='0';
end if;
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then
for i in wbs_sel_i'range loop
if wbs_sel_i(i)='1' then
if wbs_adr_i="00"&X"000000" then
value(i*8+7 downto i*8)<=
unsigned(wbs_dat_i(i*8+7 downto i*8));
cnt<=5;
end if;
end if;
end loop;
end if;
end if;
end if;
end process;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
result<=(others=>'0');
else
result<=shift_left(value,1)+value;
end if;
end if;
end process;
 
wbs_ack_o<=wbs_cyc_i and wbs_stb_i;
wbs_dat_o<=std_logic_vector(value) when wbs_adr_i="00"&X"000000" else
std_logic_vector(result) when wbs_adr_i="00"&X"000001" else
(others=>'-');
 
irq_o<=irq;
 
end architecture;
---------------------------------------------------------------------
-- Coprocessor
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Performs a simple arithmetic operation, uses interrupt to wake
-- up the CPU.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity coprocessor is
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
irq_o: out std_logic
);
end entity;
 
architecture rtl of coprocessor is
 
signal value: unsigned(31 downto 0):=(others=>'0');
signal result: unsigned(31 downto 0):=(others=>'0');
signal cnt: integer range 0 to 5:=0;
signal irq: std_logic:='0';
 
begin
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
value<=(others=>'0');
cnt<=0;
irq<='0';
else
if cnt>0 then
cnt<=cnt-1;
end if;
if cnt=1 then
irq<='1';
else
irq<='0';
end if;
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then
for i in wbs_sel_i'range loop
if wbs_sel_i(i)='1' then
if wbs_adr_i="00"&X"000000" then
value(i*8+7 downto i*8)<=
unsigned(wbs_dat_i(i*8+7 downto i*8));
cnt<=5;
end if;
end if;
end loop;
end if;
end if;
end if;
end process;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
result<=(others=>'0');
else
result<=shift_left(value,1)+value;
end if;
end if;
end process;
 
wbs_ack_o<=wbs_cyc_i and wbs_stb_i;
wbs_dat_o<=std_logic_vector(value) when wbs_adr_i="00"&X"000000" else
std_logic_vector(result) when wbs_adr_i="00"&X"000001" else
(others=>'-');
 
irq_o<=irq;
 
end architecture;
/platform/dbus_monitor.vhd
1,117 → 1,117
---------------------------------------------------------------------
-- DBUS monitor
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Monitors LXP32 data bus transactions, optionally throttles them.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity dbus_monitor is
generic(
THROTTLE: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(31 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
wbm_cyc_o: out std_logic;
wbm_stb_o: out std_logic;
wbm_we_o: out std_logic;
wbm_sel_o: out std_logic_vector(3 downto 0);
wbm_ack_i: in std_logic;
wbm_adr_o: out std_logic_vector(31 downto 2);
wbm_dat_o: out std_logic_vector(31 downto 0);
wbm_dat_i: in std_logic_vector(31 downto 0)
);
end entity;
 
architecture rtl of dbus_monitor is
 
signal prbs: std_logic;
signal cycle: std_logic:='0';
 
signal cyc_ff: std_logic:='0';
signal ack_ff: std_logic:='0';
 
begin
 
-- Manage throttling
 
gen_throttling: if THROTTLE generate
throttle_inst: entity work.scrambler(rtl)
generic map(TAP1=>6,TAP2=>7)
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs);
end generate;
 
gen_no_throttling: if not THROTTLE generate
prbs<='0';
end generate;
 
-- CPU interface
 
wbs_ack_o<=wbm_ack_i;
wbs_dat_o<=wbm_dat_i when wbm_ack_i='1' else (others=>'-');
 
-- Interconnect interface
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
cycle<='0';
elsif prbs='0' and wbs_cyc_i='1' then
cycle<='1';
elsif wbs_cyc_i='0' then
cycle<='0';
end if;
end if;
end process;
 
wbm_cyc_o<=wbs_cyc_i and (not prbs or cycle);
wbm_stb_o<=wbs_stb_i and (not prbs or cycle);
wbm_we_o<=wbs_we_i;
wbm_sel_o<=wbs_sel_i;
wbm_adr_o<=wbs_adr_i;
wbm_dat_o<=wbs_dat_i;
 
-- Check handshake correctness
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
cyc_ff<='0';
ack_ff<='0';
else
cyc_ff<=wbs_cyc_i;
ack_ff<=wbm_ack_i;
assert wbm_ack_i='0' or (wbs_cyc_i and (not prbs or cycle))='1'
report "DBUS error: ACK asserted without CYC"
severity failure;
assert not (wbs_cyc_i='0' and cyc_ff='1' and ack_ff/='1')
report "DBUS error: cycle terminated prematurely"
severity failure;
end if;
end if;
end process;
 
end architecture;
---------------------------------------------------------------------
-- DBUS monitor
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Monitors LXP32 data bus transactions, optionally throttles them.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity dbus_monitor is
generic(
THROTTLE: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(31 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
wbm_cyc_o: out std_logic;
wbm_stb_o: out std_logic;
wbm_we_o: out std_logic;
wbm_sel_o: out std_logic_vector(3 downto 0);
wbm_ack_i: in std_logic;
wbm_adr_o: out std_logic_vector(31 downto 2);
wbm_dat_o: out std_logic_vector(31 downto 0);
wbm_dat_i: in std_logic_vector(31 downto 0)
);
end entity;
 
architecture rtl of dbus_monitor is
 
signal prbs: std_logic;
signal cycle: std_logic:='0';
 
signal cyc_ff: std_logic:='0';
signal ack_ff: std_logic:='0';
 
begin
 
-- Manage throttling
 
gen_throttling: if THROTTLE generate
throttle_inst: entity work.scrambler(rtl)
generic map(TAP1=>6,TAP2=>7)
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs);
end generate;
 
gen_no_throttling: if not THROTTLE generate
prbs<='0';
end generate;
 
-- CPU interface
 
wbs_ack_o<=wbm_ack_i;
wbs_dat_o<=wbm_dat_i when wbm_ack_i='1' else (others=>'-');
 
-- Interconnect interface
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
cycle<='0';
elsif prbs='0' and wbs_cyc_i='1' then
cycle<='1';
elsif wbs_cyc_i='0' then
cycle<='0';
end if;
end if;
end process;
 
wbm_cyc_o<=wbs_cyc_i and (not prbs or cycle);
wbm_stb_o<=wbs_stb_i and (not prbs or cycle);
wbm_we_o<=wbs_we_i;
wbm_sel_o<=wbs_sel_i;
wbm_adr_o<=wbs_adr_i;
wbm_dat_o<=wbs_dat_i;
 
-- Check handshake correctness
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
cyc_ff<='0';
ack_ff<='0';
else
cyc_ff<=wbs_cyc_i;
ack_ff<=wbm_ack_i;
assert wbm_ack_i='0' or (wbs_cyc_i and (not prbs or cycle))='1'
report "DBUS error: ACK asserted without CYC"
severity failure;
assert not (wbs_cyc_i='0' and cyc_ff='1' and ack_ff/='1')
report "DBUS error: cycle terminated prematurely"
severity failure;
end if;
end if;
end process;
 
end architecture;
/platform/generic_dpram.vhd
1,162 → 1,162
---------------------------------------------------------------------
-- Generic FPGA memory block
--
-- Copyright (c) 2015 by Alex I. Kuznetsov
--
-- Portable description of a dual-port memory block with one write
-- port.
--
-- Parameters:
-- * DATA_WIDTH: data port width
-- * ADDR_WIDTH: address port width
-- * SIZE: memory size
-- * MODE: read/write synchronization mode for port A
-- DONTCARE: choose the most efficient design
-- WR_FIRST: feed written value to the output
-- RD_FIRST: read old value
-- NOCHANGE: don't change output during write
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity generic_dpram is
generic(
DATA_WIDTH: integer;
ADDR_WIDTH: integer;
SIZE: integer;
MODE: string:="DONTCARE"
);
port(
clka_i: in std_logic;
cea_i: in std_logic;
wea_i: in std_logic;
addra_i: in std_logic_vector(ADDR_WIDTH-1 downto 0);
da_i: in std_logic_vector(DATA_WIDTH-1 downto 0);
da_o: out std_logic_vector(DATA_WIDTH-1 downto 0);
clkb_i: in std_logic;
ceb_i: in std_logic;
addrb_i: in std_logic_vector(ADDR_WIDTH-1 downto 0);
db_o: out std_logic_vector(DATA_WIDTH-1 downto 0)
);
end entity;
 
architecture rtl of generic_dpram is
 
type ram_type is array(SIZE-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0);
signal ram: ram_type;
 
attribute syn_ramstyle: string;
attribute syn_ramstyle of ram: signal is "no_rw_check";
attribute ram_style: string; -- for Xilinx
attribute ram_style of ram: signal is "block";
 
begin
 
-- Ensure that generics have valid values
 
assert SIZE<=2**ADDR_WIDTH
report "SIZE must be less or equal than 2^ADDR_WIDTH"
severity failure;
 
assert MODE="DONTCARE" or MODE="WR_FIRST" or MODE="RD_FIRST" or MODE="NOCHANGE"
report "Unrecognized MODE value (DONTCARE, WR_FIRST, RD_FIRST or NOCHANGE expected)"
severity failure;
 
-- Port A (read/write)
 
port_a_dont_care_gen: if MODE="DONTCARE" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
da_o<=(others=>'-');
else
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end if;
end process;
end generate;
 
port_a_write_first_gen: if MODE="WR_FIRST" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
da_o<=da_i;
else
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end if;
end process;
end generate;
 
port_a_read_first_gen: if MODE="RD_FIRST" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
end if;
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end process;
end generate;
 
port_a_no_change_gen: if MODE="NOCHANGE" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
else
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end if;
end process;
end generate;
 
-- Port B (read only)
 
process (clkb_i) is
begin
if rising_edge(clkb_i) then
if ceb_i='1' then
if is_x(addrb_i) then
db_o<=(others=>'X');
else
db_o<=ram(to_integer(unsigned(addrb_i)));
end if;
end if;
end if;
end process;
 
end architecture;
---------------------------------------------------------------------
-- Generic FPGA memory block
--
-- Copyright (c) 2015 by Alex I. Kuznetsov
--
-- Portable description of a dual-port memory block with one write
-- port.
--
-- Parameters:
-- * DATA_WIDTH: data port width
-- * ADDR_WIDTH: address port width
-- * SIZE: memory size
-- * MODE: read/write synchronization mode for port A
-- DONTCARE: choose the most efficient design
-- WR_FIRST: feed written value to the output
-- RD_FIRST: read old value
-- NOCHANGE: don't change output during write
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity generic_dpram is
generic(
DATA_WIDTH: integer;
ADDR_WIDTH: integer;
SIZE: integer;
MODE: string:="DONTCARE"
);
port(
clka_i: in std_logic;
cea_i: in std_logic;
wea_i: in std_logic;
addra_i: in std_logic_vector(ADDR_WIDTH-1 downto 0);
da_i: in std_logic_vector(DATA_WIDTH-1 downto 0);
da_o: out std_logic_vector(DATA_WIDTH-1 downto 0);
clkb_i: in std_logic;
ceb_i: in std_logic;
addrb_i: in std_logic_vector(ADDR_WIDTH-1 downto 0);
db_o: out std_logic_vector(DATA_WIDTH-1 downto 0)
);
end entity;
 
architecture rtl of generic_dpram is
 
type ram_type is array(SIZE-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0);
signal ram: ram_type;
 
attribute syn_ramstyle: string;
attribute syn_ramstyle of ram: signal is "no_rw_check";
attribute ram_style: string; -- for Xilinx
attribute ram_style of ram: signal is "block";
 
begin
 
-- Ensure that generics have valid values
 
assert SIZE<=2**ADDR_WIDTH
report "SIZE must be less or equal than 2^ADDR_WIDTH"
severity failure;
 
assert MODE="DONTCARE" or MODE="WR_FIRST" or MODE="RD_FIRST" or MODE="NOCHANGE"
report "Unrecognized MODE value (DONTCARE, WR_FIRST, RD_FIRST or NOCHANGE expected)"
severity failure;
 
-- Port A (read/write)
 
port_a_dont_care_gen: if MODE="DONTCARE" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
da_o<=(others=>'-');
else
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end if;
end process;
end generate;
 
port_a_write_first_gen: if MODE="WR_FIRST" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
da_o<=da_i;
else
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end if;
end process;
end generate;
 
port_a_read_first_gen: if MODE="RD_FIRST" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
end if;
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end process;
end generate;
 
port_a_no_change_gen: if MODE="NOCHANGE" generate
process (clka_i) is
begin
if rising_edge(clka_i) then
if cea_i='1' then
if wea_i='1' then
ram(to_integer(unsigned(addra_i)))<=da_i;
else
if is_x(addra_i) then
da_o<=(others=>'X');
else
da_o<=ram(to_integer(unsigned(addra_i)));
end if;
end if;
end if;
end if;
end process;
end generate;
 
-- Port B (read only)
 
process (clkb_i) is
begin
if rising_edge(clkb_i) then
if ceb_i='1' then
if is_x(addrb_i) then
db_o<=(others=>'X');
else
db_o<=ram(to_integer(unsigned(addrb_i)));
end if;
end if;
end if;
end process;
 
end architecture;
/platform/ibus_adapter.vhd
1,101 → 1,101
---------------------------------------------------------------------
-- IBUS adapter
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Converts the Low Latency Interface to WISHBONE registered
-- feedback protocol.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity ibus_adapter is
port(
clk_i: in std_logic;
rst_i: in std_logic;
ibus_cyc_i: in std_logic;
ibus_stb_i: in std_logic;
ibus_cti_i: in std_logic_vector(2 downto 0);
ibus_bte_i: in std_logic_vector(1 downto 0);
ibus_ack_o: out std_logic;
ibus_adr_i: in std_logic_vector(29 downto 0);
ibus_dat_o: out std_logic_vector(31 downto 0);
lli_re_o: out std_logic;
lli_adr_o: out std_logic_vector(29 downto 0);
lli_dat_i: in std_logic_vector(31 downto 0);
lli_busy_i: in std_logic
);
end entity;
 
architecture rtl of ibus_adapter is
 
constant burst_delay: integer:=5;
signal burst_delay_cnt: integer:=0;
signal delay_burst: std_logic;
 
signal re: std_logic;
signal requested: std_logic:='0';
signal adr: unsigned(29 downto 0);
signal ack: std_logic;
 
begin
 
-- Insert burst delay
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
burst_delay_cnt<=0;
elsif ibus_cyc_i='0' then
burst_delay_cnt<=burst_delay;
elsif burst_delay_cnt/=0 then
burst_delay_cnt<=burst_delay_cnt-1;
end if;
end if;
end process;
 
delay_burst<='1' when burst_delay_cnt/=0 else '0';
 
-- Generate ACK signal
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
requested<='0';
elsif lli_busy_i='0' then
requested<=re;
end if;
end if;
end process;
 
ack<=requested and not lli_busy_i;
 
-- Generate LLI signals
 
re<=(ibus_cyc_i and ibus_stb_i and not delay_burst) when ack='0' or
(ibus_cti_i="010" and ibus_bte_i="00") else '0';
 
adr<=unsigned(ibus_adr_i) when re='1' and ack='0' else
unsigned(ibus_adr_i)+1 when re='1' and ack='1' else
(others=>'-');
 
lli_re_o<=re;
lli_adr_o<=std_logic_vector(adr);
 
-- Generate IBUS signals
 
ibus_ack_o<=ack;
ibus_dat_o<=lli_dat_i when ack='1' else (others=>'-');
 
end architecture;
---------------------------------------------------------------------
-- IBUS adapter
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Converts the Low Latency Interface to WISHBONE registered
-- feedback protocol.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity ibus_adapter is
port(
clk_i: in std_logic;
rst_i: in std_logic;
ibus_cyc_i: in std_logic;
ibus_stb_i: in std_logic;
ibus_cti_i: in std_logic_vector(2 downto 0);
ibus_bte_i: in std_logic_vector(1 downto 0);
ibus_ack_o: out std_logic;
ibus_adr_i: in std_logic_vector(29 downto 0);
ibus_dat_o: out std_logic_vector(31 downto 0);
lli_re_o: out std_logic;
lli_adr_o: out std_logic_vector(29 downto 0);
lli_dat_i: in std_logic_vector(31 downto 0);
lli_busy_i: in std_logic
);
end entity;
 
architecture rtl of ibus_adapter is
 
constant burst_delay: integer:=5;
signal burst_delay_cnt: integer:=0;
signal delay_burst: std_logic;
 
signal re: std_logic;
signal requested: std_logic:='0';
signal adr: unsigned(29 downto 0);
signal ack: std_logic;
 
begin
 
-- Insert burst delay
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
burst_delay_cnt<=0;
elsif ibus_cyc_i='0' then
burst_delay_cnt<=burst_delay;
elsif burst_delay_cnt/=0 then
burst_delay_cnt<=burst_delay_cnt-1;
end if;
end if;
end process;
 
delay_burst<='1' when burst_delay_cnt/=0 else '0';
 
-- Generate ACK signal
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
requested<='0';
elsif lli_busy_i='0' then
requested<=re;
end if;
end if;
end process;
 
ack<=requested and not lli_busy_i;
 
-- Generate LLI signals
 
re<=(ibus_cyc_i and ibus_stb_i and not delay_burst) when ack='0' or
(ibus_cti_i="010" and ibus_bte_i="00") else '0';
 
adr<=unsigned(ibus_adr_i) when re='1' and ack='0' else
unsigned(ibus_adr_i)+1 when re='1' and ack='1' else
(others=>'-');
 
lli_re_o<=re;
lli_adr_o<=std_logic_vector(adr);
 
-- Generate IBUS signals
 
ibus_ack_o<=ack;
ibus_dat_o<=lli_dat_i when ack='1' else (others=>'-');
 
end architecture;
/platform/intercon.vhd
1,215 → 1,215
---------------------------------------------------------------------
-- Simple WISHBONE interconnect
--
-- Generated by wigen at 02/16/16 06:15:08
--
-- Configuration:
-- Number of masters: 2
-- Number of slaves: 4
-- Master address width: 32
-- Slave address width: 28
-- Port size: 32
-- Port granularity: 8
-- Entity name: intercon
-- Pipelined arbiter: no
-- Registered feedback: no
-- Unsafe slave decoder: no
--
-- Command line:
-- wigen -e intercon 2 4 32 28 32 8
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity intercon is
port(
clk_i: in std_logic;
rst_i: in std_logic;
 
s0_cyc_i: in std_logic;
s0_stb_i: in std_logic;
s0_we_i: in std_logic;
s0_sel_i: in std_logic_vector(3 downto 0);
s0_ack_o: out std_logic;
s0_adr_i: in std_logic_vector(31 downto 2);
s0_dat_i: in std_logic_vector(31 downto 0);
s0_dat_o: out std_logic_vector(31 downto 0);
 
s1_cyc_i: in std_logic;
s1_stb_i: in std_logic;
s1_we_i: in std_logic;
s1_sel_i: in std_logic_vector(3 downto 0);
s1_ack_o: out std_logic;
s1_adr_i: in std_logic_vector(31 downto 2);
s1_dat_i: in std_logic_vector(31 downto 0);
s1_dat_o: out std_logic_vector(31 downto 0);
 
m0_cyc_o: out std_logic;
m0_stb_o: out std_logic;
m0_we_o: out std_logic;
m0_sel_o: out std_logic_vector(3 downto 0);
m0_ack_i: in std_logic;
m0_adr_o: out std_logic_vector(27 downto 2);
m0_dat_o: out std_logic_vector(31 downto 0);
m0_dat_i: in std_logic_vector(31 downto 0);
 
m1_cyc_o: out std_logic;
m1_stb_o: out std_logic;
m1_we_o: out std_logic;
m1_sel_o: out std_logic_vector(3 downto 0);
m1_ack_i: in std_logic;
m1_adr_o: out std_logic_vector(27 downto 2);
m1_dat_o: out std_logic_vector(31 downto 0);
m1_dat_i: in std_logic_vector(31 downto 0);
 
m2_cyc_o: out std_logic;
m2_stb_o: out std_logic;
m2_we_o: out std_logic;
m2_sel_o: out std_logic_vector(3 downto 0);
m2_ack_i: in std_logic;
m2_adr_o: out std_logic_vector(27 downto 2);
m2_dat_o: out std_logic_vector(31 downto 0);
m2_dat_i: in std_logic_vector(31 downto 0);
 
m3_cyc_o: out std_logic;
m3_stb_o: out std_logic;
m3_we_o: out std_logic;
m3_sel_o: out std_logic_vector(3 downto 0);
m3_ack_i: in std_logic;
m3_adr_o: out std_logic_vector(27 downto 2);
m3_dat_o: out std_logic_vector(31 downto 0);
m3_dat_i: in std_logic_vector(31 downto 0)
);
end entity;
 
architecture rtl of intercon is
 
signal request: std_logic_vector(1 downto 0);
signal grant_next: std_logic_vector(1 downto 0);
signal grant: std_logic_vector(1 downto 0);
signal grant_reg: std_logic_vector(1 downto 0):=(others=>'0');
 
signal select_slave: std_logic_vector(4 downto 0);
 
signal cyc_mux: std_logic;
signal stb_mux: std_logic;
signal we_mux: std_logic;
signal sel_mux: std_logic_vector(3 downto 0);
signal adr_mux: std_logic_vector(31 downto 2);
signal wdata_mux: std_logic_vector(31 downto 0);
 
signal ack_mux: std_logic;
signal rdata_mux: std_logic_vector(31 downto 0);
 
begin
 
-- ARBITER
-- Selects the active master. Masters with lower port numbers
-- have higher priority. Ongoing cycles are not interrupted.
 
request<=s1_cyc_i&s0_cyc_i;
 
grant_next<="01" when request(0)='1' else
"10" when request(1)='1' else
(others=>'0');
 
grant<=grant_reg when (request and grant_reg)/="00" else grant_next;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
grant_reg<=(others=>'0');
else
grant_reg<=grant;
end if;
end if;
end process;
 
-- MASTER->SLAVE MUX
 
cyc_mux<=(s0_cyc_i and grant(0)) or
(s1_cyc_i and grant(1));
 
stb_mux<=(s0_stb_i and grant(0)) or
(s1_stb_i and grant(1));
 
we_mux<=(s0_we_i and grant(0)) or
(s1_we_i and grant(1));
 
sel_mux_gen: for i in sel_mux'range generate
sel_mux(i)<=(s0_sel_i(i) and grant(0)) or
(s1_sel_i(i) and grant(1));
end generate;
 
adr_mux_gen: for i in adr_mux'range generate
adr_mux(i)<=(s0_adr_i(i) and grant(0)) or
(s1_adr_i(i) and grant(1));
end generate;
 
wdata_mux_gen: for i in wdata_mux'range generate
wdata_mux(i)<=(s0_dat_i(i) and grant(0)) or
(s1_dat_i(i) and grant(1));
end generate;
 
-- MASTER->SLAVE DEMUX
 
select_slave<="00001" when adr_mux(31 downto 28)="0000" else
"00010" when adr_mux(31 downto 28)="0001" else
"00100" when adr_mux(31 downto 28)="0010" else
"01000" when adr_mux(31 downto 28)="0011" else
"10000"; -- fallback slave
 
m0_cyc_o<=cyc_mux and select_slave(0);
m0_stb_o<=stb_mux and select_slave(0);
m0_we_o<=we_mux;
m0_sel_o<=sel_mux;
m0_adr_o<=adr_mux(m0_adr_o'range);
m0_dat_o<=wdata_mux;
 
m1_cyc_o<=cyc_mux and select_slave(1);
m1_stb_o<=stb_mux and select_slave(1);
m1_we_o<=we_mux;
m1_sel_o<=sel_mux;
m1_adr_o<=adr_mux(m1_adr_o'range);
m1_dat_o<=wdata_mux;
 
m2_cyc_o<=cyc_mux and select_slave(2);
m2_stb_o<=stb_mux and select_slave(2);
m2_we_o<=we_mux;
m2_sel_o<=sel_mux;
m2_adr_o<=adr_mux(m2_adr_o'range);
m2_dat_o<=wdata_mux;
 
m3_cyc_o<=cyc_mux and select_slave(3);
m3_stb_o<=stb_mux and select_slave(3);
m3_we_o<=we_mux;
m3_sel_o<=sel_mux;
m3_adr_o<=adr_mux(m3_adr_o'range);
m3_dat_o<=wdata_mux;
 
-- SLAVE->MASTER MUX
 
ack_mux<=(m0_ack_i and select_slave(0)) or
(m1_ack_i and select_slave(1)) or
(m2_ack_i and select_slave(2)) or
(m3_ack_i and select_slave(3)) or
(cyc_mux and stb_mux and select_slave(4)); -- fallback slave
 
rdata_mux_gen: for i in rdata_mux'range generate
rdata_mux(i)<=(m0_dat_i(i) and select_slave(0)) or
(m1_dat_i(i) and select_slave(1)) or
(m2_dat_i(i) and select_slave(2)) or
(m3_dat_i(i) and select_slave(3));
end generate;
 
-- SLAVE->MASTER DEMUX
 
s0_ack_o<=ack_mux and grant(0);
s0_dat_o<=rdata_mux;
 
s1_ack_o<=ack_mux and grant(1);
s1_dat_o<=rdata_mux;
 
end architecture;
---------------------------------------------------------------------
-- Simple WISHBONE interconnect
--
-- Generated by wigen at 02/16/16 06:15:08
--
-- Configuration:
-- Number of masters: 2
-- Number of slaves: 4
-- Master address width: 32
-- Slave address width: 28
-- Port size: 32
-- Port granularity: 8
-- Entity name: intercon
-- Pipelined arbiter: no
-- Registered feedback: no
-- Unsafe slave decoder: no
--
-- Command line:
-- wigen -e intercon 2 4 32 28 32 8
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity intercon is
port(
clk_i: in std_logic;
rst_i: in std_logic;
 
s0_cyc_i: in std_logic;
s0_stb_i: in std_logic;
s0_we_i: in std_logic;
s0_sel_i: in std_logic_vector(3 downto 0);
s0_ack_o: out std_logic;
s0_adr_i: in std_logic_vector(31 downto 2);
s0_dat_i: in std_logic_vector(31 downto 0);
s0_dat_o: out std_logic_vector(31 downto 0);
 
s1_cyc_i: in std_logic;
s1_stb_i: in std_logic;
s1_we_i: in std_logic;
s1_sel_i: in std_logic_vector(3 downto 0);
s1_ack_o: out std_logic;
s1_adr_i: in std_logic_vector(31 downto 2);
s1_dat_i: in std_logic_vector(31 downto 0);
s1_dat_o: out std_logic_vector(31 downto 0);
 
m0_cyc_o: out std_logic;
m0_stb_o: out std_logic;
m0_we_o: out std_logic;
m0_sel_o: out std_logic_vector(3 downto 0);
m0_ack_i: in std_logic;
m0_adr_o: out std_logic_vector(27 downto 2);
m0_dat_o: out std_logic_vector(31 downto 0);
m0_dat_i: in std_logic_vector(31 downto 0);
 
m1_cyc_o: out std_logic;
m1_stb_o: out std_logic;
m1_we_o: out std_logic;
m1_sel_o: out std_logic_vector(3 downto 0);
m1_ack_i: in std_logic;
m1_adr_o: out std_logic_vector(27 downto 2);
m1_dat_o: out std_logic_vector(31 downto 0);
m1_dat_i: in std_logic_vector(31 downto 0);
 
m2_cyc_o: out std_logic;
m2_stb_o: out std_logic;
m2_we_o: out std_logic;
m2_sel_o: out std_logic_vector(3 downto 0);
m2_ack_i: in std_logic;
m2_adr_o: out std_logic_vector(27 downto 2);
m2_dat_o: out std_logic_vector(31 downto 0);
m2_dat_i: in std_logic_vector(31 downto 0);
 
m3_cyc_o: out std_logic;
m3_stb_o: out std_logic;
m3_we_o: out std_logic;
m3_sel_o: out std_logic_vector(3 downto 0);
m3_ack_i: in std_logic;
m3_adr_o: out std_logic_vector(27 downto 2);
m3_dat_o: out std_logic_vector(31 downto 0);
m3_dat_i: in std_logic_vector(31 downto 0)
);
end entity;
 
architecture rtl of intercon is
 
signal request: std_logic_vector(1 downto 0);
signal grant_next: std_logic_vector(1 downto 0);
signal grant: std_logic_vector(1 downto 0);
signal grant_reg: std_logic_vector(1 downto 0):=(others=>'0');
 
signal select_slave: std_logic_vector(4 downto 0);
 
signal cyc_mux: std_logic;
signal stb_mux: std_logic;
signal we_mux: std_logic;
signal sel_mux: std_logic_vector(3 downto 0);
signal adr_mux: std_logic_vector(31 downto 2);
signal wdata_mux: std_logic_vector(31 downto 0);
 
signal ack_mux: std_logic;
signal rdata_mux: std_logic_vector(31 downto 0);
 
begin
 
-- ARBITER
-- Selects the active master. Masters with lower port numbers
-- have higher priority. Ongoing cycles are not interrupted.
 
request<=s1_cyc_i&s0_cyc_i;
 
grant_next<="01" when request(0)='1' else
"10" when request(1)='1' else
(others=>'0');
 
grant<=grant_reg when (request and grant_reg)/="00" else grant_next;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
grant_reg<=(others=>'0');
else
grant_reg<=grant;
end if;
end if;
end process;
 
-- MASTER->SLAVE MUX
 
cyc_mux<=(s0_cyc_i and grant(0)) or
(s1_cyc_i and grant(1));
 
stb_mux<=(s0_stb_i and grant(0)) or
(s1_stb_i and grant(1));
 
we_mux<=(s0_we_i and grant(0)) or
(s1_we_i and grant(1));
 
sel_mux_gen: for i in sel_mux'range generate
sel_mux(i)<=(s0_sel_i(i) and grant(0)) or
(s1_sel_i(i) and grant(1));
end generate;
 
adr_mux_gen: for i in adr_mux'range generate
adr_mux(i)<=(s0_adr_i(i) and grant(0)) or
(s1_adr_i(i) and grant(1));
end generate;
 
wdata_mux_gen: for i in wdata_mux'range generate
wdata_mux(i)<=(s0_dat_i(i) and grant(0)) or
(s1_dat_i(i) and grant(1));
end generate;
 
-- MASTER->SLAVE DEMUX
 
select_slave<="00001" when adr_mux(31 downto 28)="0000" else
"00010" when adr_mux(31 downto 28)="0001" else
"00100" when adr_mux(31 downto 28)="0010" else
"01000" when adr_mux(31 downto 28)="0011" else
"10000"; -- fallback slave
 
m0_cyc_o<=cyc_mux and select_slave(0);
m0_stb_o<=stb_mux and select_slave(0);
m0_we_o<=we_mux;
m0_sel_o<=sel_mux;
m0_adr_o<=adr_mux(m0_adr_o'range);
m0_dat_o<=wdata_mux;
 
m1_cyc_o<=cyc_mux and select_slave(1);
m1_stb_o<=stb_mux and select_slave(1);
m1_we_o<=we_mux;
m1_sel_o<=sel_mux;
m1_adr_o<=adr_mux(m1_adr_o'range);
m1_dat_o<=wdata_mux;
 
m2_cyc_o<=cyc_mux and select_slave(2);
m2_stb_o<=stb_mux and select_slave(2);
m2_we_o<=we_mux;
m2_sel_o<=sel_mux;
m2_adr_o<=adr_mux(m2_adr_o'range);
m2_dat_o<=wdata_mux;
 
m3_cyc_o<=cyc_mux and select_slave(3);
m3_stb_o<=stb_mux and select_slave(3);
m3_we_o<=we_mux;
m3_sel_o<=sel_mux;
m3_adr_o<=adr_mux(m3_adr_o'range);
m3_dat_o<=wdata_mux;
 
-- SLAVE->MASTER MUX
 
ack_mux<=(m0_ack_i and select_slave(0)) or
(m1_ack_i and select_slave(1)) or
(m2_ack_i and select_slave(2)) or
(m3_ack_i and select_slave(3)) or
(cyc_mux and stb_mux and select_slave(4)); -- fallback slave
 
rdata_mux_gen: for i in rdata_mux'range generate
rdata_mux(i)<=(m0_dat_i(i) and select_slave(0)) or
(m1_dat_i(i) and select_slave(1)) or
(m2_dat_i(i) and select_slave(2)) or
(m3_dat_i(i) and select_slave(3));
end generate;
 
-- SLAVE->MASTER DEMUX
 
s0_ack_o<=ack_mux and grant(0);
s0_dat_o<=rdata_mux;
 
s1_ack_o<=ack_mux and grant(1);
s1_dat_o<=rdata_mux;
 
end architecture;
/platform/platform.vhd
1,356 → 1,356
---------------------------------------------------------------------
-- LXP32 platform top-level design unit
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- A SoC-like simulation platform for the LXP32 CPU, containing
-- a few peripherals such as program RAM, timer and coprocessor.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity platform is
generic(
CPU_DBUS_RMW: boolean;
CPU_MUL_ARCH: string;
MODEL_LXP32C: boolean;
THROTTLE_DBUS: boolean;
THROTTLE_IBUS: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
cpu_rst_i: in std_logic;
wbm_cyc_o: out std_logic;
wbm_stb_o: out std_logic;
wbm_we_o: out std_logic;
wbm_sel_o: out std_logic_vector(3 downto 0);
wbm_ack_i: in std_logic;
wbm_adr_o: out std_logic_vector(27 downto 2);
wbm_dat_o: out std_logic_vector(31 downto 0);
wbm_dat_i: in std_logic_vector(31 downto 0);
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(31 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
gp_io: inout std_logic_vector(31 downto 0)
);
end entity;
 
architecture rtl of platform is
 
type wbm_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
ack: std_logic;
adr: std_logic_vector(31 downto 2);
wdata: std_logic_vector(31 downto 0);
rdata: std_logic_vector(31 downto 0);
end record;
 
type wbs_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
ack: std_logic;
adr: std_logic_vector(27 downto 2);
wdata: std_logic_vector(31 downto 0);
rdata: std_logic_vector(31 downto 0);
end record;
 
type ibus_type is record
cyc: std_logic;
stb: std_logic;
cti: std_logic_vector(2 downto 0);
bte: std_logic_vector(1 downto 0);
ack: std_logic;
adr: std_logic_vector(29 downto 0);
dat: std_logic_vector(31 downto 0);
end record;
 
signal cpu_rst: std_logic;
signal cpu_irq: std_logic_vector(7 downto 0);
signal cpu_dbus: wbm_type;
signal cpu_ibus: ibus_type;
 
signal lli_re: std_logic;
signal lli_adr: std_logic_vector(29 downto 0);
signal lli_dat: std_logic_vector(31 downto 0);
signal lli_busy: std_logic;
 
signal monitor_dbus: wbm_type;
 
signal ram_wb: wbs_type;
 
signal timer_wb: wbs_type;
signal timer_elapsed: std_logic;
 
signal coprocessor_wb: wbs_type;
signal coprocessor_irq: std_logic;
 
begin
 
-- Interconnect
 
intercon_inst: entity work.intercon(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
 
s0_cyc_i=>wbs_cyc_i,
s0_stb_i=>wbs_stb_i,
s0_we_i=>wbs_we_i,
s0_sel_i=>wbs_sel_i,
s0_ack_o=>wbs_ack_o,
s0_adr_i=>wbs_adr_i,
s0_dat_i=>wbs_dat_i,
s0_dat_o=>wbs_dat_o,
 
s1_cyc_i=>monitor_dbus.cyc,
s1_stb_i=>monitor_dbus.stb,
s1_we_i=>monitor_dbus.we,
s1_sel_i=>monitor_dbus.sel,
s1_ack_o=>monitor_dbus.ack,
s1_adr_i=>monitor_dbus.adr,
s1_dat_i=>monitor_dbus.wdata,
s1_dat_o=>monitor_dbus.rdata,
 
m0_cyc_o=>ram_wb.cyc,
m0_stb_o=>ram_wb.stb,
m0_we_o=>ram_wb.we,
m0_sel_o=>ram_wb.sel,
m0_ack_i=>ram_wb.ack,
m0_adr_o=>ram_wb.adr,
m0_dat_o=>ram_wb.wdata,
m0_dat_i=>ram_wb.rdata,
 
m1_cyc_o=>wbm_cyc_o,
m1_stb_o=>wbm_stb_o,
m1_we_o=>wbm_we_o,
m1_sel_o=>wbm_sel_o,
m1_ack_i=>wbm_ack_i,
m1_adr_o=>wbm_adr_o,
m1_dat_o=>wbm_dat_o,
m1_dat_i=>wbm_dat_i,
m2_cyc_o=>timer_wb.cyc,
m2_stb_o=>timer_wb.stb,
m2_we_o=>timer_wb.we,
m2_sel_o=>timer_wb.sel,
m2_ack_i=>timer_wb.ack,
m2_adr_o=>timer_wb.adr,
m2_dat_o=>timer_wb.wdata,
m2_dat_i=>timer_wb.rdata,
m3_cyc_o=>coprocessor_wb.cyc,
m3_stb_o=>coprocessor_wb.stb,
m3_we_o=>coprocessor_wb.we,
m3_sel_o=>coprocessor_wb.sel,
m3_ack_i=>coprocessor_wb.ack,
m3_adr_o=>coprocessor_wb.adr,
m3_dat_o=>coprocessor_wb.wdata,
m3_dat_i=>coprocessor_wb.rdata
);
 
-- CPU
 
cpu_rst<=cpu_rst_i or rst_i;
 
-- Note: we connect the timer IRQ to 2 CPU channels to test
-- handling of simultaneously arriving interrupt requests.
 
cpu_irq<="00000"&coprocessor_irq&timer_elapsed&timer_elapsed;
 
gen_lxp32u: if not MODEL_LXP32C generate
lxp32u_top_inst: entity work.lxp32u_top(rtl)
generic map(
DBUS_RMW=>CPU_DBUS_RMW,
DIVIDER_EN=>true,
MUL_ARCH=>CPU_MUL_ARCH,
START_ADDR=>(others=>'0')
)
port map(
clk_i=>clk_i,
rst_i=>cpu_rst,
lli_re_o=>lli_re,
lli_adr_o=>lli_adr,
lli_dat_i=>lli_dat,
lli_busy_i=>lli_busy,
dbus_cyc_o=>cpu_dbus.cyc,
dbus_stb_o=>cpu_dbus.stb,
dbus_we_o=>cpu_dbus.we,
dbus_sel_o=>cpu_dbus.sel,
dbus_ack_i=>cpu_dbus.ack,
dbus_adr_o=>cpu_dbus.adr,
dbus_dat_o=>cpu_dbus.wdata,
dbus_dat_i=>cpu_dbus.rdata,
irq_i=>cpu_irq
);
end generate;
 
gen_lxp32c: if MODEL_LXP32C generate
lxp32c_top_inst: entity work.lxp32c_top(rtl)
generic map(
DBUS_RMW=>CPU_DBUS_RMW,
DIVIDER_EN=>true,
IBUS_BURST_SIZE=>16,
IBUS_PREFETCH_SIZE=>32,
MUL_ARCH=>CPU_MUL_ARCH,
START_ADDR=>(others=>'0')
)
port map(
clk_i=>clk_i,
rst_i=>cpu_rst,
ibus_cyc_o=>cpu_ibus.cyc,
ibus_stb_o=>cpu_ibus.stb,
ibus_cti_o=>cpu_ibus.cti,
ibus_bte_o=>cpu_ibus.bte,
ibus_ack_i=>cpu_ibus.ack,
ibus_adr_o=>cpu_ibus.adr,
ibus_dat_i=>cpu_ibus.dat,
dbus_cyc_o=>cpu_dbus.cyc,
dbus_stb_o=>cpu_dbus.stb,
dbus_we_o=>cpu_dbus.we,
dbus_sel_o=>cpu_dbus.sel,
dbus_ack_i=>cpu_dbus.ack,
dbus_adr_o=>cpu_dbus.adr,
dbus_dat_o=>cpu_dbus.wdata,
dbus_dat_i=>cpu_dbus.rdata,
irq_i=>cpu_irq
);
ibus_adapter_inst: entity work.ibus_adapter(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
ibus_cyc_i=>cpu_ibus.cyc,
ibus_stb_i=>cpu_ibus.stb,
ibus_cti_i=>cpu_ibus.cti,
ibus_bte_i=>cpu_ibus.bte,
ibus_ack_o=>cpu_ibus.ack,
ibus_adr_i=>cpu_ibus.adr,
ibus_dat_o=>cpu_ibus.dat,
lli_re_o=>lli_re,
lli_adr_o=>lli_adr,
lli_dat_i=>lli_dat,
lli_busy_i=>lli_busy
);
end generate;
 
-- DBUS monitor
 
dbus_monitor_inst: entity work.dbus_monitor(rtl)
generic map(
THROTTLE=>THROTTLE_DBUS
)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>cpu_dbus.cyc,
wbs_stb_i=>cpu_dbus.stb,
wbs_we_i=>cpu_dbus.we,
wbs_sel_i=>cpu_dbus.sel,
wbs_ack_o=>cpu_dbus.ack,
wbs_adr_i=>cpu_dbus.adr,
wbs_dat_i=>cpu_dbus.wdata,
wbs_dat_o=>cpu_dbus.rdata,
wbm_cyc_o=>monitor_dbus.cyc,
wbm_stb_o=>monitor_dbus.stb,
wbm_we_o=>monitor_dbus.we,
wbm_sel_o=>monitor_dbus.sel,
wbm_ack_i=>monitor_dbus.ack,
wbm_adr_o=>monitor_dbus.adr,
wbm_dat_o=>monitor_dbus.wdata,
wbm_dat_i=>monitor_dbus.rdata
);
 
-- Program RAM
 
program_ram_inst: entity work.program_ram(rtl)
generic map(
THROTTLE=>THROTTLE_IBUS
)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>ram_wb.cyc,
wbs_stb_i=>ram_wb.stb,
wbs_we_i=>ram_wb.we,
wbs_sel_i=>ram_wb.sel,
wbs_ack_o=>ram_wb.ack,
wbs_adr_i=>ram_wb.adr,
wbs_dat_i=>ram_wb.wdata,
wbs_dat_o=>ram_wb.rdata,
lli_re_i=>lli_re,
lli_adr_i=>lli_adr,
lli_dat_o=>lli_dat,
lli_busy_o=>lli_busy
);
 
-- Timer
 
timer_inst: entity work.timer(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>timer_wb.cyc,
wbs_stb_i=>timer_wb.stb,
wbs_we_i=>timer_wb.we,
wbs_sel_i=>timer_wb.sel,
wbs_ack_o=>timer_wb.ack,
wbs_adr_i=>timer_wb.adr,
wbs_dat_i=>timer_wb.wdata,
wbs_dat_o=>timer_wb.rdata,
elapsed_o=>timer_elapsed
);
 
-- Coprocessor
 
coprocessor_inst: entity work.coprocessor(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>coprocessor_wb.cyc,
wbs_stb_i=>coprocessor_wb.stb,
wbs_we_i=>coprocessor_wb.we,
wbs_sel_i=>coprocessor_wb.sel,
wbs_ack_o=>coprocessor_wb.ack,
wbs_adr_i=>coprocessor_wb.adr,
wbs_dat_i=>coprocessor_wb.wdata,
wbs_dat_o=>coprocessor_wb.rdata,
irq_o=>coprocessor_irq
);
 
end architecture;
---------------------------------------------------------------------
-- LXP32 platform top-level design unit
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- A SoC-like simulation platform for the LXP32 CPU, containing
-- a few peripherals such as program RAM, timer and coprocessor.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity platform is
generic(
CPU_DBUS_RMW: boolean;
CPU_MUL_ARCH: string;
MODEL_LXP32C: boolean;
THROTTLE_DBUS: boolean;
THROTTLE_IBUS: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
cpu_rst_i: in std_logic;
wbm_cyc_o: out std_logic;
wbm_stb_o: out std_logic;
wbm_we_o: out std_logic;
wbm_sel_o: out std_logic_vector(3 downto 0);
wbm_ack_i: in std_logic;
wbm_adr_o: out std_logic_vector(27 downto 2);
wbm_dat_o: out std_logic_vector(31 downto 0);
wbm_dat_i: in std_logic_vector(31 downto 0);
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(31 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
gp_io: inout std_logic_vector(31 downto 0)
);
end entity;
 
architecture rtl of platform is
 
type wbm_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
ack: std_logic;
adr: std_logic_vector(31 downto 2);
wdata: std_logic_vector(31 downto 0);
rdata: std_logic_vector(31 downto 0);
end record;
 
type wbs_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
ack: std_logic;
adr: std_logic_vector(27 downto 2);
wdata: std_logic_vector(31 downto 0);
rdata: std_logic_vector(31 downto 0);
end record;
 
type ibus_type is record
cyc: std_logic;
stb: std_logic;
cti: std_logic_vector(2 downto 0);
bte: std_logic_vector(1 downto 0);
ack: std_logic;
adr: std_logic_vector(29 downto 0);
dat: std_logic_vector(31 downto 0);
end record;
 
signal cpu_rst: std_logic;
signal cpu_irq: std_logic_vector(7 downto 0);
signal cpu_dbus: wbm_type;
signal cpu_ibus: ibus_type;
 
signal lli_re: std_logic;
signal lli_adr: std_logic_vector(29 downto 0);
signal lli_dat: std_logic_vector(31 downto 0);
signal lli_busy: std_logic;
 
signal monitor_dbus: wbm_type;
 
signal ram_wb: wbs_type;
 
signal timer_wb: wbs_type;
signal timer_elapsed: std_logic;
 
signal coprocessor_wb: wbs_type;
signal coprocessor_irq: std_logic;
 
begin
 
-- Interconnect
 
intercon_inst: entity work.intercon(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
 
s0_cyc_i=>wbs_cyc_i,
s0_stb_i=>wbs_stb_i,
s0_we_i=>wbs_we_i,
s0_sel_i=>wbs_sel_i,
s0_ack_o=>wbs_ack_o,
s0_adr_i=>wbs_adr_i,
s0_dat_i=>wbs_dat_i,
s0_dat_o=>wbs_dat_o,
 
s1_cyc_i=>monitor_dbus.cyc,
s1_stb_i=>monitor_dbus.stb,
s1_we_i=>monitor_dbus.we,
s1_sel_i=>monitor_dbus.sel,
s1_ack_o=>monitor_dbus.ack,
s1_adr_i=>monitor_dbus.adr,
s1_dat_i=>monitor_dbus.wdata,
s1_dat_o=>monitor_dbus.rdata,
 
m0_cyc_o=>ram_wb.cyc,
m0_stb_o=>ram_wb.stb,
m0_we_o=>ram_wb.we,
m0_sel_o=>ram_wb.sel,
m0_ack_i=>ram_wb.ack,
m0_adr_o=>ram_wb.adr,
m0_dat_o=>ram_wb.wdata,
m0_dat_i=>ram_wb.rdata,
 
m1_cyc_o=>wbm_cyc_o,
m1_stb_o=>wbm_stb_o,
m1_we_o=>wbm_we_o,
m1_sel_o=>wbm_sel_o,
m1_ack_i=>wbm_ack_i,
m1_adr_o=>wbm_adr_o,
m1_dat_o=>wbm_dat_o,
m1_dat_i=>wbm_dat_i,
m2_cyc_o=>timer_wb.cyc,
m2_stb_o=>timer_wb.stb,
m2_we_o=>timer_wb.we,
m2_sel_o=>timer_wb.sel,
m2_ack_i=>timer_wb.ack,
m2_adr_o=>timer_wb.adr,
m2_dat_o=>timer_wb.wdata,
m2_dat_i=>timer_wb.rdata,
m3_cyc_o=>coprocessor_wb.cyc,
m3_stb_o=>coprocessor_wb.stb,
m3_we_o=>coprocessor_wb.we,
m3_sel_o=>coprocessor_wb.sel,
m3_ack_i=>coprocessor_wb.ack,
m3_adr_o=>coprocessor_wb.adr,
m3_dat_o=>coprocessor_wb.wdata,
m3_dat_i=>coprocessor_wb.rdata
);
 
-- CPU
 
cpu_rst<=cpu_rst_i or rst_i;
 
-- Note: we connect the timer IRQ to 2 CPU channels to test
-- handling of simultaneously arriving interrupt requests.
 
cpu_irq<="00000"&coprocessor_irq&timer_elapsed&timer_elapsed;
 
gen_lxp32u: if not MODEL_LXP32C generate
lxp32u_top_inst: entity work.lxp32u_top(rtl)
generic map(
DBUS_RMW=>CPU_DBUS_RMW,
DIVIDER_EN=>true,
MUL_ARCH=>CPU_MUL_ARCH,
START_ADDR=>(others=>'0')
)
port map(
clk_i=>clk_i,
rst_i=>cpu_rst,
lli_re_o=>lli_re,
lli_adr_o=>lli_adr,
lli_dat_i=>lli_dat,
lli_busy_i=>lli_busy,
dbus_cyc_o=>cpu_dbus.cyc,
dbus_stb_o=>cpu_dbus.stb,
dbus_we_o=>cpu_dbus.we,
dbus_sel_o=>cpu_dbus.sel,
dbus_ack_i=>cpu_dbus.ack,
dbus_adr_o=>cpu_dbus.adr,
dbus_dat_o=>cpu_dbus.wdata,
dbus_dat_i=>cpu_dbus.rdata,
irq_i=>cpu_irq
);
end generate;
 
gen_lxp32c: if MODEL_LXP32C generate
lxp32c_top_inst: entity work.lxp32c_top(rtl)
generic map(
DBUS_RMW=>CPU_DBUS_RMW,
DIVIDER_EN=>true,
IBUS_BURST_SIZE=>16,
IBUS_PREFETCH_SIZE=>32,
MUL_ARCH=>CPU_MUL_ARCH,
START_ADDR=>(others=>'0')
)
port map(
clk_i=>clk_i,
rst_i=>cpu_rst,
ibus_cyc_o=>cpu_ibus.cyc,
ibus_stb_o=>cpu_ibus.stb,
ibus_cti_o=>cpu_ibus.cti,
ibus_bte_o=>cpu_ibus.bte,
ibus_ack_i=>cpu_ibus.ack,
ibus_adr_o=>cpu_ibus.adr,
ibus_dat_i=>cpu_ibus.dat,
dbus_cyc_o=>cpu_dbus.cyc,
dbus_stb_o=>cpu_dbus.stb,
dbus_we_o=>cpu_dbus.we,
dbus_sel_o=>cpu_dbus.sel,
dbus_ack_i=>cpu_dbus.ack,
dbus_adr_o=>cpu_dbus.adr,
dbus_dat_o=>cpu_dbus.wdata,
dbus_dat_i=>cpu_dbus.rdata,
irq_i=>cpu_irq
);
ibus_adapter_inst: entity work.ibus_adapter(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
ibus_cyc_i=>cpu_ibus.cyc,
ibus_stb_i=>cpu_ibus.stb,
ibus_cti_i=>cpu_ibus.cti,
ibus_bte_i=>cpu_ibus.bte,
ibus_ack_o=>cpu_ibus.ack,
ibus_adr_i=>cpu_ibus.adr,
ibus_dat_o=>cpu_ibus.dat,
lli_re_o=>lli_re,
lli_adr_o=>lli_adr,
lli_dat_i=>lli_dat,
lli_busy_i=>lli_busy
);
end generate;
 
-- DBUS monitor
 
dbus_monitor_inst: entity work.dbus_monitor(rtl)
generic map(
THROTTLE=>THROTTLE_DBUS
)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>cpu_dbus.cyc,
wbs_stb_i=>cpu_dbus.stb,
wbs_we_i=>cpu_dbus.we,
wbs_sel_i=>cpu_dbus.sel,
wbs_ack_o=>cpu_dbus.ack,
wbs_adr_i=>cpu_dbus.adr,
wbs_dat_i=>cpu_dbus.wdata,
wbs_dat_o=>cpu_dbus.rdata,
wbm_cyc_o=>monitor_dbus.cyc,
wbm_stb_o=>monitor_dbus.stb,
wbm_we_o=>monitor_dbus.we,
wbm_sel_o=>monitor_dbus.sel,
wbm_ack_i=>monitor_dbus.ack,
wbm_adr_o=>monitor_dbus.adr,
wbm_dat_o=>monitor_dbus.wdata,
wbm_dat_i=>monitor_dbus.rdata
);
 
-- Program RAM
 
program_ram_inst: entity work.program_ram(rtl)
generic map(
THROTTLE=>THROTTLE_IBUS
)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>ram_wb.cyc,
wbs_stb_i=>ram_wb.stb,
wbs_we_i=>ram_wb.we,
wbs_sel_i=>ram_wb.sel,
wbs_ack_o=>ram_wb.ack,
wbs_adr_i=>ram_wb.adr,
wbs_dat_i=>ram_wb.wdata,
wbs_dat_o=>ram_wb.rdata,
lli_re_i=>lli_re,
lli_adr_i=>lli_adr,
lli_dat_o=>lli_dat,
lli_busy_o=>lli_busy
);
 
-- Timer
 
timer_inst: entity work.timer(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>timer_wb.cyc,
wbs_stb_i=>timer_wb.stb,
wbs_we_i=>timer_wb.we,
wbs_sel_i=>timer_wb.sel,
wbs_ack_o=>timer_wb.ack,
wbs_adr_i=>timer_wb.adr,
wbs_dat_i=>timer_wb.wdata,
wbs_dat_o=>timer_wb.rdata,
elapsed_o=>timer_elapsed
);
 
-- Coprocessor
 
coprocessor_inst: entity work.coprocessor(rtl)
port map(
clk_i=>clk_i,
rst_i=>rst_i,
wbs_cyc_i=>coprocessor_wb.cyc,
wbs_stb_i=>coprocessor_wb.stb,
wbs_we_i=>coprocessor_wb.we,
wbs_sel_i=>coprocessor_wb.sel,
wbs_ack_o=>coprocessor_wb.ack,
wbs_adr_i=>coprocessor_wb.adr,
wbs_dat_i=>coprocessor_wb.wdata,
wbs_dat_o=>coprocessor_wb.rdata,
irq_o=>coprocessor_irq
);
 
end architecture;
/platform/program_ram.vhd
1,145 → 1,145
---------------------------------------------------------------------
-- Program RAM
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Program RAM for the LXP32 test platform. Has two interfaces:
-- WISHBONE (for data access) and LLI (for LXP32 instruction bus).
-- Optionally performs throttling.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
use work.common_pkg.all;
 
entity program_ram is
generic(
THROTTLE: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
lli_re_i: in std_logic;
lli_adr_i: in std_logic_vector(29 downto 0);
lli_dat_o: out std_logic_vector(31 downto 0);
lli_busy_o: out std_logic
);
end entity;
 
architecture rtl of program_ram is
 
signal ram_a_we: std_logic_vector(3 downto 0);
signal ram_a_rdata: std_logic_vector(31 downto 0);
 
signal ram_b_re: std_logic;
signal ram_b_rdata: std_logic_vector(31 downto 0);
 
signal ack_write: std_logic;
signal ack_read: std_logic;
 
signal prbs: std_logic;
signal lli_busy: std_logic:='0';
 
begin
 
-- The total memory size is 16384 words, i.e. 64K bytes
 
gen_dprams: for i in 3 downto 0 generate
generic_dpram_inst: entity work.generic_dpram(rtl)
generic map(
DATA_WIDTH=>8,
ADDR_WIDTH=>14,
SIZE=>16384,
MODE=>"DONTCARE"
)
port map(
clka_i=>clk_i,
cea_i=>'1',
wea_i=>ram_a_we(i),
addra_i=>wbs_adr_i(15 downto 2),
da_i=>wbs_dat_i(i*8+7 downto i*8),
da_o=>ram_a_rdata(i*8+7 downto i*8),
clkb_i=>clk_i,
ceb_i=>ram_b_re,
addrb_i=>lli_adr_i(13 downto 0),
db_o=>ram_b_rdata(i*8+7 downto i*8)
);
end generate;
 
-- WISHBONE interface
 
gen_ram_a_we: for i in 3 downto 0 generate
ram_a_we(i)<='1' when wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1'
and wbs_sel_i(i)='1' and wbs_adr_i(27 downto 16)="000000000000" else '0';
end generate;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
ack_read<=wbs_cyc_i and wbs_stb_i and not wbs_we_i and not ack_read;
end if;
end process;
 
ack_write<=wbs_cyc_i and wbs_stb_i and wbs_we_i;
 
wbs_ack_o<=ack_read or ack_write;
wbs_dat_o<=ram_a_rdata;
 
-- Low Latency Interface (with optional pseudo-random throttling)
 
process (clk_i) is
begin
if rising_edge(clk_i) then
assert lli_re_i='0' or lli_adr_i(lli_adr_i'high downto 14)=X"0000"
report "Attempted to fetch instruction from a non-existent address 0x"&
hex_string(lli_adr_i&"00")
severity failure;
end if;
end process;
 
gen_throttling: if THROTTLE generate
throttle_inst: entity work.scrambler(rtl)
generic map(TAP1=>9,TAP2=>11)
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs);
end generate;
 
gen_no_throttling: if not THROTTLE generate
prbs<='0';
end generate;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
lli_busy<='0';
elsif prbs='1' and lli_re_i='1' then
lli_busy<='1';
elsif prbs='0' then
lli_busy<='0';
end if;
end if;
end process;
 
ram_b_re<=lli_re_i and not lli_busy;
 
lli_busy_o<=lli_busy;
lli_dat_o<=ram_b_rdata when lli_busy='0' else (others=>'-');
 
end architecture;
---------------------------------------------------------------------
-- Program RAM
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Program RAM for the LXP32 test platform. Has two interfaces:
-- WISHBONE (for data access) and LLI (for LXP32 instruction bus).
-- Optionally performs throttling.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
use work.common_pkg.all;
 
entity program_ram is
generic(
THROTTLE: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
lli_re_i: in std_logic;
lli_adr_i: in std_logic_vector(29 downto 0);
lli_dat_o: out std_logic_vector(31 downto 0);
lli_busy_o: out std_logic
);
end entity;
 
architecture rtl of program_ram is
 
signal ram_a_we: std_logic_vector(3 downto 0);
signal ram_a_rdata: std_logic_vector(31 downto 0);
 
signal ram_b_re: std_logic;
signal ram_b_rdata: std_logic_vector(31 downto 0);
 
signal ack_write: std_logic;
signal ack_read: std_logic;
 
signal prbs: std_logic;
signal lli_busy: std_logic:='0';
 
begin
 
-- The total memory size is 16384 words, i.e. 64K bytes
 
gen_dprams: for i in 3 downto 0 generate
generic_dpram_inst: entity work.generic_dpram(rtl)
generic map(
DATA_WIDTH=>8,
ADDR_WIDTH=>14,
SIZE=>16384,
MODE=>"DONTCARE"
)
port map(
clka_i=>clk_i,
cea_i=>'1',
wea_i=>ram_a_we(i),
addra_i=>wbs_adr_i(15 downto 2),
da_i=>wbs_dat_i(i*8+7 downto i*8),
da_o=>ram_a_rdata(i*8+7 downto i*8),
clkb_i=>clk_i,
ceb_i=>ram_b_re,
addrb_i=>lli_adr_i(13 downto 0),
db_o=>ram_b_rdata(i*8+7 downto i*8)
);
end generate;
 
-- WISHBONE interface
 
gen_ram_a_we: for i in 3 downto 0 generate
ram_a_we(i)<='1' when wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1'
and wbs_sel_i(i)='1' and wbs_adr_i(27 downto 16)="000000000000" else '0';
end generate;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
ack_read<=wbs_cyc_i and wbs_stb_i and not wbs_we_i and not ack_read;
end if;
end process;
 
ack_write<=wbs_cyc_i and wbs_stb_i and wbs_we_i;
 
wbs_ack_o<=ack_read or ack_write;
wbs_dat_o<=ram_a_rdata;
 
-- Low Latency Interface (with optional pseudo-random throttling)
 
process (clk_i) is
begin
if rising_edge(clk_i) then
assert lli_re_i='0' or lli_adr_i(lli_adr_i'high downto 14)=X"0000"
report "Attempted to fetch instruction from a non-existent address 0x"&
hex_string(lli_adr_i&"00")
severity failure;
end if;
end process;
 
gen_throttling: if THROTTLE generate
throttle_inst: entity work.scrambler(rtl)
generic map(TAP1=>9,TAP2=>11)
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs);
end generate;
 
gen_no_throttling: if not THROTTLE generate
prbs<='0';
end generate;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
lli_busy<='0';
elsif prbs='1' and lli_re_i='1' then
lli_busy<='1';
elsif prbs='0' then
lli_busy<='0';
end if;
end if;
end process;
 
ram_b_re<=lli_re_i and not lli_busy;
 
lli_busy_o<=lli_busy;
lli_dat_o<=ram_b_rdata when lli_busy='0' else (others=>'-');
 
end architecture;
/platform/scrambler.vhd
1,54 → 1,54
---------------------------------------------------------------------
-- Scrambler
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Generates a pseudo-random binary sequence using a Linear-Feedback
-- Shift Register (LFSR).
--
-- In order to generate a maximum-length sequence, 1+x^TAP1+x^TAP2
-- must be a primitive polynomial. Typical polynomials include:
-- (6,7), (9,11), (14,15).
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity scrambler is
generic(
TAP1: integer;
TAP2: integer
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
ce_i: in std_logic;
d_o: out std_logic
);
end entity;
 
architecture rtl of scrambler is
 
signal reg: std_logic_vector(TAP2 downto 1):=(others=>'1');
 
begin
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
reg<=(others=>'1');
elsif ce_i='1' then
reg<=reg(TAP2-1 downto 1)&(reg(TAP2) xor reg(TAP1));
end if;
end if;
end process;
 
d_o<=reg(1);
 
end architecture;
---------------------------------------------------------------------
-- Scrambler
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Generates a pseudo-random binary sequence using a Linear-Feedback
-- Shift Register (LFSR).
--
-- In order to generate a maximum-length sequence, 1+x^TAP1+x^TAP2
-- must be a primitive polynomial. Typical polynomials include:
-- (6,7), (9,11), (14,15).
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
entity scrambler is
generic(
TAP1: integer;
TAP2: integer
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
ce_i: in std_logic;
d_o: out std_logic
);
end entity;
 
architecture rtl of scrambler is
 
signal reg: std_logic_vector(TAP2 downto 1):=(others=>'1');
 
begin
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
reg<=(others=>'1');
elsif ce_i='1' then
reg<=reg(TAP2-1 downto 1)&(reg(TAP2) xor reg(TAP1));
end if;
end if;
end process;
 
d_o<=reg(1);
 
end architecture;
/platform/timer.vhd
1,98 → 1,98
---------------------------------------------------------------------
-- Timer
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- A simple programmable interval timer.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity timer is
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
elapsed_o: out std_logic
);
end entity;
 
architecture rtl of timer is
 
signal pulses: unsigned(31 downto 0):=(others=>'0');
signal interval: unsigned(31 downto 0):=(others=>'0');
signal cnt: unsigned(31 downto 0):=(others=>'0');
signal elapsed: std_logic:='0';
 
begin
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
pulses<=(others=>'0');
interval<=(others=>'0');
cnt<=(others=>'0');
elapsed<='0';
else
elapsed<='0';
if pulses/=X"00000000" or cnt/=X"00000000" then
if cnt=X"00000000" then
if pulses/=X"FFFFFFFF" then
pulses<=pulses-1;
end if;
if pulses/=X"00000000" then
cnt<=interval;
end if;
else
cnt<=cnt-1;
end if;
if cnt=X"00000001" then
elapsed<='1';
end if;
end if;
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then
for i in wbs_sel_i'range loop
if wbs_sel_i(i)='1' then
if wbs_adr_i="00"&X"000000" then
pulses(i*8+7 downto i*8)<=
unsigned(wbs_dat_i(i*8+7 downto i*8));
cnt<=(others=>'0');
end if;
if wbs_adr_i="00"&X"000001" then
interval(i*8+7 downto i*8)<=
unsigned(wbs_dat_i(i*8+7 downto i*8));
cnt<=(others=>'0');
end if;
end if;
end loop;
end if;
end if;
end if;
end process;
 
wbs_ack_o<=wbs_cyc_i and wbs_stb_i;
wbs_dat_o<=std_logic_vector(pulses) when wbs_adr_i="00"&X"000000" else
std_logic_vector(interval) when wbs_adr_i="00"&X"000001" else
(others=>'-');
 
elapsed_o<=elapsed;
 
end architecture;
---------------------------------------------------------------------
-- Timer
--
-- Part of the LXP32 test platform
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- A simple programmable interval timer.
--
-- Note: regardless of whether this description is synthesizable,
-- it was designed exclusively for simulation purposes.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity timer is
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
elapsed_o: out std_logic
);
end entity;
 
architecture rtl of timer is
 
signal pulses: unsigned(31 downto 0):=(others=>'0');
signal interval: unsigned(31 downto 0):=(others=>'0');
signal cnt: unsigned(31 downto 0):=(others=>'0');
signal elapsed: std_logic:='0';
 
begin
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
pulses<=(others=>'0');
interval<=(others=>'0');
cnt<=(others=>'0');
elapsed<='0';
else
elapsed<='0';
if pulses/=X"00000000" or cnt/=X"00000000" then
if cnt=X"00000000" then
if pulses/=X"FFFFFFFF" then
pulses<=pulses-1;
end if;
if pulses/=X"00000000" then
cnt<=interval;
end if;
else
cnt<=cnt-1;
end if;
if cnt=X"00000001" then
elapsed<='1';
end if;
end if;
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then
for i in wbs_sel_i'range loop
if wbs_sel_i(i)='1' then
if wbs_adr_i="00"&X"000000" then
pulses(i*8+7 downto i*8)<=
unsigned(wbs_dat_i(i*8+7 downto i*8));
cnt<=(others=>'0');
end if;
if wbs_adr_i="00"&X"000001" then
interval(i*8+7 downto i*8)<=
unsigned(wbs_dat_i(i*8+7 downto i*8));
cnt<=(others=>'0');
end if;
end if;
end loop;
end if;
end if;
end if;
end process;
 
wbs_ack_o<=wbs_cyc_i and wbs_stb_i;
wbs_dat_o<=std_logic_vector(pulses) when wbs_adr_i="00"&X"000000" else
std_logic_vector(interval) when wbs_adr_i="00"&X"000001" else
(others=>'-');
 
elapsed_o<=elapsed;
 
end architecture;
/tb/monitor.vhd
1,80 → 1,80
---------------------------------------------------------------------
-- Test monitor
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Provide means for a test platform to interact with the testbench.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.common_pkg.all;
use work.tb_pkg.all;
 
entity monitor is
generic(
VERBOSE: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
finished_o: out std_logic;
result_o: out std_logic_vector(31 downto 0)
);
end entity;
 
architecture sim of monitor is
 
signal result: std_logic_vector(31 downto 0):=(others=>'0');
signal finished: std_logic:='0';
 
begin
 
wbs_ack_o<=wbs_cyc_i and wbs_stb_i;
wbs_dat_o<=(others=>'0');
 
finished_o<=finished;
result_o<=result;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
finished<='0';
result<=(others=>'0');
elsif wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then
assert wbs_sel_i="1111"
report "Monitor doesn't support byte-granular access "&
"(SEL_I() is 0x"&hex_string(wbs_sel_i)&")"
severity failure;
if VERBOSE then
report "Monitor: value "&
"0x"&hex_string(wbs_dat_i)&
" written to address "&
"0x"&hex_string(wbs_adr_i);
end if;
if unsigned(wbs_adr_i)=to_unsigned(0,wbs_adr_i'length) then
result<=wbs_dat_i;
finished<='1';
end if;
end if;
end if;
end process;
 
end architecture;
---------------------------------------------------------------------
-- Test monitor
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Provide means for a test platform to interact with the testbench.
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.common_pkg.all;
use work.tb_pkg.all;
 
entity monitor is
generic(
VERBOSE: boolean
);
port(
clk_i: in std_logic;
rst_i: in std_logic;
wbs_cyc_i: in std_logic;
wbs_stb_i: in std_logic;
wbs_we_i: in std_logic;
wbs_sel_i: in std_logic_vector(3 downto 0);
wbs_ack_o: out std_logic;
wbs_adr_i: in std_logic_vector(27 downto 2);
wbs_dat_i: in std_logic_vector(31 downto 0);
wbs_dat_o: out std_logic_vector(31 downto 0);
finished_o: out std_logic;
result_o: out std_logic_vector(31 downto 0)
);
end entity;
 
architecture sim of monitor is
 
signal result: std_logic_vector(31 downto 0):=(others=>'0');
signal finished: std_logic:='0';
 
begin
 
wbs_ack_o<=wbs_cyc_i and wbs_stb_i;
wbs_dat_o<=(others=>'0');
 
finished_o<=finished;
result_o<=result;
 
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i='1' then
finished<='0';
result<=(others=>'0');
elsif wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then
assert wbs_sel_i="1111"
report "Monitor doesn't support byte-granular access "&
"(SEL_I() is 0x"&hex_string(wbs_sel_i)&")"
severity failure;
if VERBOSE then
report "Monitor: value "&
"0x"&hex_string(wbs_dat_i)&
" written to address "&
"0x"&hex_string(wbs_adr_i);
end if;
if unsigned(wbs_adr_i)=to_unsigned(0,wbs_adr_i'length) then
result<=wbs_dat_i;
finished<='1';
end if;
end if;
end if;
end process;
 
end architecture;
/tb/tb.vhd
1,147 → 1,147
---------------------------------------------------------------------
-- LXP32 verification environment (self-checking testbench)
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Simulates LXP32 test platform, verifies results.
--
-- Parameters:
-- CPU_DBUS_RMW: DBUS_RMW CPU generic
-- CPU_MUL_ARCH: MUL_ARCH CPU generic
-- MODEL_LXP32C: when true, simulates LXP32C variant (with
-- instruction cache), otherwise LXP32U
-- TEST_CASE: If non-empty, selects a test case to run.
-- If empty, all tests are executed.
-- THROTTLE_IBUS: perform pseudo-random instruction bus
-- throttling
-- THROTTLE_DBUS: perform pseudo-random data bus throttling
-- VERBOSE: report everything that is written to the
-- test monitor address space
---------------------------------------------------------------------
 
use std.textio.all;
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.tb_pkg.all;
 
entity tb is
generic(
CPU_DBUS_RMW: boolean:=false;
CPU_MUL_ARCH: string:="dsp";
MODEL_LXP32C: boolean:=true;
TEST_CASE: string:="";
THROTTLE_DBUS: boolean:=true;
THROTTLE_IBUS: boolean:=true;
VERBOSE: boolean:=false
);
end entity;
 
architecture testbench of tb is
 
signal clk: std_logic:='0';
 
signal globals: soc_globals_type:=(others=>'1');
signal soc_wbs_in: soc_wbs_in_type;
signal soc_wbs_out: soc_wbs_out_type;
signal soc_wbm_in: soc_wbm_in_type;
signal soc_wbm_out: soc_wbm_out_type;
 
signal monitor_out: monitor_out_type;
 
signal finish: std_logic:='0';
 
begin
 
dut: entity work.platform(rtl)
generic map(
CPU_DBUS_RMW=>CPU_DBUS_RMW,
CPU_MUL_ARCH=>CPU_MUL_ARCH,
MODEL_LXP32C=>MODEL_LXP32C,
THROTTLE_DBUS=>THROTTLE_DBUS,
THROTTLE_IBUS=>THROTTLE_IBUS
)
port map(
clk_i=>clk,
rst_i=>globals.rst_i,
cpu_rst_i=>globals.cpu_rst_i,
wbm_cyc_o=>soc_wbm_out.cyc,
wbm_stb_o=>soc_wbm_out.stb,
wbm_we_o=>soc_wbm_out.we,
wbm_sel_o=>soc_wbm_out.sel,
wbm_ack_i=>soc_wbm_in.ack,
wbm_adr_o=>soc_wbm_out.adr,
wbm_dat_o=>soc_wbm_out.dat,
wbm_dat_i=>soc_wbm_in.dat,
wbs_cyc_i=>soc_wbs_in.cyc,
wbs_stb_i=>soc_wbs_in.stb,
wbs_we_i=>soc_wbs_in.we,
wbs_sel_i=>soc_wbs_in.sel,
wbs_ack_o=>soc_wbs_out.ack,
wbs_adr_i=>soc_wbs_in.adr,
wbs_dat_i=>soc_wbs_in.dat,
wbs_dat_o=>soc_wbs_out.dat
);
 
monitor_inst: entity work.monitor(sim)
generic map(
VERBOSE=>VERBOSE
)
port map(
clk_i=>clk,
rst_i=>globals.rst_i,
wbs_cyc_i=>soc_wbm_out.cyc,
wbs_stb_i=>soc_wbm_out.stb,
wbs_we_i=>soc_wbm_out.we,
wbs_sel_i=>soc_wbm_out.sel,
wbs_ack_o=>soc_wbm_in.ack,
wbs_adr_i=>soc_wbm_out.adr,
wbs_dat_i=>soc_wbm_out.dat,
wbs_dat_o=>soc_wbm_in.dat,
finished_o=>monitor_out.valid,
result_o=>monitor_out.data
);
 
clk<=not clk and not finish after 5 ns;
 
process is
begin
if TEST_CASE'length=0 then
run_test("test001.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test002.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test003.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test004.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test005.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test006.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test007.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test008.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test009.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test010.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test011.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test012.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test013.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test014.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test015.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test016.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test017.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test018.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test019.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test020.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
else
run_test(TEST_CASE,clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
end if;
report "ALL TESTS WERE COMPLETED SUCCESSFULLY";
finish<='1';
wait;
end process;
 
end architecture;
---------------------------------------------------------------------
-- LXP32 verification environment (self-checking testbench)
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Simulates LXP32 test platform, verifies results.
--
-- Parameters:
-- CPU_DBUS_RMW: DBUS_RMW CPU generic
-- CPU_MUL_ARCH: MUL_ARCH CPU generic
-- MODEL_LXP32C: when true, simulates LXP32C variant (with
-- instruction cache), otherwise LXP32U
-- TEST_CASE: If non-empty, selects a test case to run.
-- If empty, all tests are executed.
-- THROTTLE_IBUS: perform pseudo-random instruction bus
-- throttling
-- THROTTLE_DBUS: perform pseudo-random data bus throttling
-- VERBOSE: report everything that is written to the
-- test monitor address space
---------------------------------------------------------------------
 
use std.textio.all;
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.tb_pkg.all;
 
entity tb is
generic(
CPU_DBUS_RMW: boolean:=false;
CPU_MUL_ARCH: string:="dsp";
MODEL_LXP32C: boolean:=true;
TEST_CASE: string:="";
THROTTLE_DBUS: boolean:=true;
THROTTLE_IBUS: boolean:=true;
VERBOSE: boolean:=false
);
end entity;
 
architecture testbench of tb is
 
signal clk: std_logic:='0';
 
signal globals: soc_globals_type:=(others=>'1');
signal soc_wbs_in: soc_wbs_in_type;
signal soc_wbs_out: soc_wbs_out_type;
signal soc_wbm_in: soc_wbm_in_type;
signal soc_wbm_out: soc_wbm_out_type;
 
signal monitor_out: monitor_out_type;
 
signal finish: std_logic:='0';
 
begin
 
dut: entity work.platform(rtl)
generic map(
CPU_DBUS_RMW=>CPU_DBUS_RMW,
CPU_MUL_ARCH=>CPU_MUL_ARCH,
MODEL_LXP32C=>MODEL_LXP32C,
THROTTLE_DBUS=>THROTTLE_DBUS,
THROTTLE_IBUS=>THROTTLE_IBUS
)
port map(
clk_i=>clk,
rst_i=>globals.rst_i,
cpu_rst_i=>globals.cpu_rst_i,
wbm_cyc_o=>soc_wbm_out.cyc,
wbm_stb_o=>soc_wbm_out.stb,
wbm_we_o=>soc_wbm_out.we,
wbm_sel_o=>soc_wbm_out.sel,
wbm_ack_i=>soc_wbm_in.ack,
wbm_adr_o=>soc_wbm_out.adr,
wbm_dat_o=>soc_wbm_out.dat,
wbm_dat_i=>soc_wbm_in.dat,
wbs_cyc_i=>soc_wbs_in.cyc,
wbs_stb_i=>soc_wbs_in.stb,
wbs_we_i=>soc_wbs_in.we,
wbs_sel_i=>soc_wbs_in.sel,
wbs_ack_o=>soc_wbs_out.ack,
wbs_adr_i=>soc_wbs_in.adr,
wbs_dat_i=>soc_wbs_in.dat,
wbs_dat_o=>soc_wbs_out.dat
);
 
monitor_inst: entity work.monitor(sim)
generic map(
VERBOSE=>VERBOSE
)
port map(
clk_i=>clk,
rst_i=>globals.rst_i,
wbs_cyc_i=>soc_wbm_out.cyc,
wbs_stb_i=>soc_wbm_out.stb,
wbs_we_i=>soc_wbm_out.we,
wbs_sel_i=>soc_wbm_out.sel,
wbs_ack_o=>soc_wbm_in.ack,
wbs_adr_i=>soc_wbm_out.adr,
wbs_dat_i=>soc_wbm_out.dat,
wbs_dat_o=>soc_wbm_in.dat,
finished_o=>monitor_out.valid,
result_o=>monitor_out.data
);
 
clk<=not clk and not finish after 5 ns;
 
process is
begin
if TEST_CASE'length=0 then
run_test("test001.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test002.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test003.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test004.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test005.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test006.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test007.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test008.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test009.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test010.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test011.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test012.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test013.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test014.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test015.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test016.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test017.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test018.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test019.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
run_test("test020.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
else
run_test(TEST_CASE,clk,globals,soc_wbs_in,soc_wbs_out,monitor_out);
end if;
report "ALL TESTS WERE COMPLETED SUCCESSFULLY";
finish<='1';
wait;
end process;
 
end architecture;
/tb/tb_pkg.vhd
1,70 → 1,70
---------------------------------------------------------------------
-- LXP32 testbench package
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Auxiliary package declaration for the LXP32 testbench
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
package tb_pkg is
constant c_max_program_size: integer:=8192;
type soc_globals_type is record
rst_i: std_logic;
cpu_rst_i: std_logic;
end record;
type soc_wbs_in_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
adr: std_logic_vector(31 downto 2);
dat: std_logic_vector(31 downto 0);
end record;
 
type soc_wbs_out_type is record
ack: std_logic;
dat: std_logic_vector(31 downto 0);
end record;
type soc_wbm_in_type is record
ack: std_logic;
dat: std_logic_vector(31 downto 0);
end record;
type soc_wbm_out_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
adr: std_logic_vector(27 downto 2);
dat: std_logic_vector(31 downto 0);
end record;
type monitor_out_type is record
data: std_logic_vector(31 downto 0);
valid: std_logic;
end record;
 
procedure load_ram(
filename: string;
signal clk: in std_logic;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type
);
 
procedure run_test(
filename: string;
signal clk: in std_logic;
signal globals: out soc_globals_type;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type;
signal result: in monitor_out_type
);
end package;
---------------------------------------------------------------------
-- LXP32 testbench package
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Auxiliary package declaration for the LXP32 testbench
---------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
 
package tb_pkg is
constant c_max_program_size: integer:=8192;
type soc_globals_type is record
rst_i: std_logic;
cpu_rst_i: std_logic;
end record;
type soc_wbs_in_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
adr: std_logic_vector(31 downto 2);
dat: std_logic_vector(31 downto 0);
end record;
 
type soc_wbs_out_type is record
ack: std_logic;
dat: std_logic_vector(31 downto 0);
end record;
type soc_wbm_in_type is record
ack: std_logic;
dat: std_logic_vector(31 downto 0);
end record;
type soc_wbm_out_type is record
cyc: std_logic;
stb: std_logic;
we: std_logic;
sel: std_logic_vector(3 downto 0);
adr: std_logic_vector(27 downto 2);
dat: std_logic_vector(31 downto 0);
end record;
type monitor_out_type is record
data: std_logic_vector(31 downto 0);
valid: std_logic;
end record;
 
procedure load_ram(
filename: string;
signal clk: in std_logic;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type
);
 
procedure run_test(
filename: string;
signal clk: in std_logic;
signal globals: out soc_globals_type;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type;
signal result: in monitor_out_type
);
end package;
/tb/tb_pkg_body.vhd
1,100 → 1,100
---------------------------------------------------------------------
-- LXP32 testbench package body
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Auxiliary package body for the LXP32 testbench
---------------------------------------------------------------------
 
use std.textio.all;
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.common_pkg.all;
 
package body tb_pkg is
procedure load_ram(
filename: string;
signal clk: in std_logic;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type
) is
file f: text open read_mode is filename;
variable i: integer:=0;
variable l: line;
variable v: bit_vector(31 downto 0);
begin
wait until rising_edge(clk);
report "Loading program RAM from """&filename&"""";
while not endfile(f) loop
readline(f,l);
read(l,v);
assert i<c_max_program_size report "Error: program size is too large" severity failure;
soc_in.cyc<='1';
soc_in.stb<='1';
soc_in.we<='1';
soc_in.sel<=(others=>'1');
soc_in.adr<=std_logic_vector(to_unsigned(i,30));
soc_in.dat<=to_stdlogicvector(v);
wait until rising_edge(clk) and soc_out.ack='1';
i:=i+1;
end loop;
report integer'image(i)&" words loaded from """&filename&"""";
soc_in.cyc<='0';
soc_in.stb<='0';
wait until rising_edge(clk);
end procedure;
 
procedure run_test(
filename: string;
signal clk: in std_logic;
signal globals: out soc_globals_type;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type;
signal result: in monitor_out_type
) is
begin
-- Assert SoC and CPU resets
wait until rising_edge(clk);
globals.rst_i<='1';
globals.cpu_rst_i<='1';
wait until rising_edge(clk);
-- Deassert SoC reset, leave CPU in reset state for now
globals.rst_i<='0';
wait until rising_edge(clk);
-- Load RAM
load_ram(filename,clk,soc_in,soc_out);
-- Deassert CPU reset
globals.cpu_rst_i<='0';
while result.valid/='1' loop
wait until rising_edge(clk);
end loop;
-- Analyze result
if result.data=X"00000001" then
report "TEST """&filename&""" RESULT: SUCCESS (return code 0x"&
hex_string(result.data)&")";
else
report "TEST """&filename&""" RESULT: FAILURE (return code 0x"&
hex_string(result.data)&")" severity failure;
end if;
end procedure;
end package body;
---------------------------------------------------------------------
-- LXP32 testbench package body
--
-- Part of the LXP32 testbench
--
-- Copyright (c) 2016 by Alex I. Kuznetsov
--
-- Auxiliary package body for the LXP32 testbench
---------------------------------------------------------------------
 
use std.textio.all;
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
use work.common_pkg.all;
 
package body tb_pkg is
procedure load_ram(
filename: string;
signal clk: in std_logic;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type
) is
file f: text open read_mode is filename;
variable i: integer:=0;
variable l: line;
variable v: bit_vector(31 downto 0);
begin
wait until rising_edge(clk);
report "Loading program RAM from """&filename&"""";
while not endfile(f) loop
readline(f,l);
read(l,v);
assert i<c_max_program_size report "Error: program size is too large" severity failure;
soc_in.cyc<='1';
soc_in.stb<='1';
soc_in.we<='1';
soc_in.sel<=(others=>'1');
soc_in.adr<=std_logic_vector(to_unsigned(i,30));
soc_in.dat<=to_stdlogicvector(v);
wait until rising_edge(clk) and soc_out.ack='1';
i:=i+1;
end loop;
report integer'image(i)&" words loaded from """&filename&"""";
soc_in.cyc<='0';
soc_in.stb<='0';
wait until rising_edge(clk);
end procedure;
 
procedure run_test(
filename: string;
signal clk: in std_logic;
signal globals: out soc_globals_type;
signal soc_in: out soc_wbs_in_type;
signal soc_out: in soc_wbs_out_type;
signal result: in monitor_out_type
) is
begin
-- Assert SoC and CPU resets
wait until rising_edge(clk);
globals.rst_i<='1';
globals.cpu_rst_i<='1';
wait until rising_edge(clk);
-- Deassert SoC reset, leave CPU in reset state for now
globals.rst_i<='0';
wait until rising_edge(clk);
-- Load RAM
load_ram(filename,clk,soc_in,soc_out);
-- Deassert CPU reset
globals.cpu_rst_i<='0';
while result.valid/='1' loop
wait until rising_edge(clk);
end loop;
-- Analyze result
if result.data=X"00000001" then
report "TEST """&filename&""" RESULT: SUCCESS (return code 0x"&
hex_string(result.data)&")";
else
report "TEST """&filename&""" RESULT: FAILURE (return code 0x"&
hex_string(result.data)&")" severity failure;
end if;
end procedure;
end package body;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.