This commit is contained in:
Blaise Tine 2022-02-05 16:12:52 -05:00
commit 2fd93e1d89
333 changed files with 15008 additions and 32483 deletions

View file

@ -19,8 +19,6 @@ install:
- export PATH=$VERILATOR_ROOT/bin:$PATH
# Install toolchain
- ci/toolchain_install.sh -all
# build project
- make -s
# stages ordering
stages:
@ -30,7 +28,13 @@ jobs:
include:
- stage: test
name: coverage
script: cp -r $PWD ../build_coverage && cd ../build_coverage && ./ci/travis_run.py ./ci/regression.sh -coverage
script: cp -r $PWD ../build_coverage && cd ../build_coverage && ./ci/travis_run.py ./ci/regression.sh -coverage
- stage: test
name: coverage64
script: cp -r $PWD ../build_coverage64 && cd ../build_coverage64 && ./ci/travis_run.py ./ci/regression64.sh -coverage
- stage: test
name: tex
script: cp -r $PWD ../build_tex && cd ../build_tex && ./ci/travis_run.py ./ci/regression.sh -tex
- stage: test
name: cluster
script: cp -r $PWD ../build_cluster && cd ../build_cluster && ./ci/travis_run.py ./ci/regression.sh -cluster

36
ci/regression64.sh Executable file
View file

@ -0,0 +1,36 @@
#!/bin/bash
# exit when any command fails
set -e
# ensure build
XLEN=64 make -s
coverage()
{
echo "begin coverage tests..."
make -C tests/riscv/isa run-simx-64
echo "coverage tests done!"
}
usage()
{
echo "usage: regression [-coverage] [-all] [-h|--help]"
}
while [ "$1" != "" ]; do
case $1 in
-coverage ) coverage
;;
-all ) coverage
;;
-h | --help ) usage
exit
;;
* ) usage
exit 1
esac
shift
done

View file

@ -20,6 +20,19 @@ riscv()
rm -rf riscv-gnu-toolchain
}
riscv64()
{
for x in {a..j}
do
wget $REPOSITORY/riscv64-gnu-toolchain/ubuntu/bionic/riscv64-gnu-toolchain.tar.bz2.parta$x
done
cat riscv64-gnu-toolchain.tar.bz2.parta* > riscv64-gnu-toolchain.tar.bz2
tar -xvf riscv64-gnu-toolchain.tar.bz2
rm -f riscv64-gnu-toolchain.tar.bz2*
cp -r riscv64-gnu-toolchain $DESTDIR
rm -rf riscv64-gnu-toolchain
}
llvm()
{
for x in {a..b}
@ -53,7 +66,7 @@ verilator()
usage()
{
echo "usage: toolchain_install [[-riscv] [-llvm] [-pocl] [-verilator] [-all] [-h|--help]]"
echo "usage: toolchain_install [[-riscv] [-riscv64] [-llvm] [-pocl] [-verilator] [-all] [-h|--help]]"
}
while [ "$1" != "" ]; do
@ -64,6 +77,8 @@ while [ "$1" != "" ]; do
;;
-riscv ) riscv
;;
-riscv64 ) riscv64
;;
-llvm ) llvm
;;
-all ) riscv

View file

@ -64,7 +64,7 @@ private:
class vx_device {
public:
vx_device()
: arch_("rv32i", NUM_CORES * NUM_CLUSTERS, NUM_WARPS, NUM_THREADS)
: arch_(NUM_CORES * NUM_CLUSTERS, NUM_WARPS, NUM_THREADS)
, ram_(RAM_PAGE_SIZE)
, processor_(arch_)
, mem_allocator_(

View file

@ -41,131 +41,131 @@ extern "C" {
void dpi_fadd(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fadd(a, b, (*frm & 0x7), fflags);
*result = rv_fadd_s(a, b, (*frm & 0x7), fflags);
}
void dpi_fsub(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fsub(a, b, (*frm & 0x7), fflags);
*result = rv_fsub_s(a, b, (*frm & 0x7), fflags);
}
void dpi_fmul(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fmul(a, b, (*frm & 0x7), fflags);
*result = rv_fmul_s(a, b, (*frm & 0x7), fflags);
}
void dpi_fmadd(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fmadd(a, b, c, (*frm & 0x7), fflags);
*result = rv_fmadd_s(a, b, c, (*frm & 0x7), fflags);
}
void dpi_fmsub(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fmsub(a, b, c, (*frm & 0x7), fflags);
*result = rv_fmsub_s(a, b, c, (*frm & 0x7), fflags);
}
void dpi_fnmadd(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fnmadd(a, b, c, (*frm & 0x7), fflags);
*result = rv_fnmadd_s(a, b, c, (*frm & 0x7), fflags);
}
void dpi_fnmsub(bool enable, int a, int b, int c, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fnmsub(a, b, c, (*frm & 0x7), fflags);
*result = rv_fnmsub_s(a, b, c, (*frm & 0x7), fflags);
}
void dpi_fdiv(bool enable, int a, int b, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fdiv(a, b, (*frm & 0x7), fflags);
*result = rv_fdiv_s(a, b, (*frm & 0x7), fflags);
}
void dpi_fsqrt(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fsqrt(a, (*frm & 0x7), fflags);
*result = rv_fsqrt_s(a, (*frm & 0x7), fflags);
}
void dpi_ftoi(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_ftoi(a, (*frm & 0x7), fflags);
*result = rv_ftoi_s(a, (*frm & 0x7), fflags);
}
void dpi_ftou(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_ftou(a, (*frm & 0x7), fflags);
*result = rv_ftou_s(a, (*frm & 0x7), fflags);
}
void dpi_itof(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_itof(a, (*frm & 0x7), fflags);
*result = rv_itof_s(a, (*frm & 0x7), fflags);
}
void dpi_utof(bool enable, int a, const svBitVecVal* frm, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_utof(a, (*frm & 0x7), fflags);
*result = rv_utof_s(a, (*frm & 0x7), fflags);
}
void dpi_flt(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_flt(a, b, fflags);
*result = rv_flt_s(a, b, fflags);
}
void dpi_fle(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fle(a, b, fflags);
*result = rv_fle_s(a, b, fflags);
}
void dpi_feq(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_feq(a, b, fflags);
*result = rv_feq_s(a, b, fflags);
}
void dpi_fmin(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fmin(a, b, fflags);
*result = rv_fmin_s(a, b, fflags);
}
void dpi_fmax(bool enable, int a, int b, int* result, svBitVecVal* fflags) {
if (!enable)
return;
*result = rv_fmax(a, b, fflags);
*result = rv_fmax_s(a, b, fflags);
}
void dpi_fclss(bool enable, int a, int* result) {
if (!enable)
return;
*result = rv_fclss(a);
*result = rv_fclss_s(a);
}
void dpi_fsgnj(bool enable, int a, int b, int* result) {
if (!enable)
return;
*result = rv_fsgnj(a, b);
*result = rv_fsgnj_s(a, b);
}
void dpi_fsgnjn(bool enable, int a, int b, int* result) {
if (!enable)
return;
*result = rv_fsgnjn(a, b);
*result = rv_fsgnjn_s(a, b);
}
void dpi_fsgnjx(bool enable, int a, int b, int* result) {
if (!enable)
return;
*result = rv_fsgnjx(a, b);
*result = rv_fsgnjx_s(a, b);
}

View file

@ -481,4 +481,4 @@
`define L3_MRSQ_SIZE 0
`endif
`endif
`endif

View file

@ -1,11 +1,25 @@
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
XLEN ?= 32
CC = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-gcc
AR = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-gcc-ar
DP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objdump
CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
ifeq ($(XLEN),32)
RISCV_TOOLCHAIN_PATH = /opt/riscv-gnu-toolchain
else
RISCV_TOOLCHAIN_PATH = /opt/riscv64-gnu-toolchain
endif
CFLAGS += -O3 -march=rv32imf -mabi=ilp32f -Wstack-usage=1024 -fno-exceptions -fdata-sections -ffunction-sections
RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
CC = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)gcc
AR = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)gcc-ar
DP = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)objdump
CP = $(RISCV_TOOLCHAIN_PATH)/bin/$(RISCV_PREFIX)objcopy
ifeq ($(XLEN),32)
CFLAGS += -march=rv32imf -mabi=ilp32f
else
CFLAGS += -march=rv64imfd -mabi=lp64d
endif
CFLAGS += -O3 -mcmodel=medany -Wstack-usage=1024 -fno-exceptions -fdata-sections -ffunction-sections
CFLAGS += -I./include -I../hw
PROJECT = libvortexrt

254
runtime/linker/vx_link64.ld Normal file
View file

@ -0,0 +1,254 @@
/* ---- Original Script: /opt/riscv32i/riscv32-unknown-elf/lib/ldscripts/elf64lriscv.x ---- */
/* Default linker script, for normal executables */
/* Copyright (C) 2014-2017 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv")
OUTPUT_ARCH(riscv)
ENTRY(_start)
SECTIONS
{
. = 0x80000000;
.interp : { *(.interp) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
.hash : { *(.hash) }
.gnu.hash : { *(.gnu.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rela.dyn :
{
*(.rela.init)
*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
*(.rela.fini)
*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
*(.rela.ctors)
*(.rela.dtors)
*(.rela.got)
*(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
*(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
*(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
*(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
PROVIDE_HIDDEN (__rela_iplt_start = .);
*(.rela.iplt)
PROVIDE_HIDDEN (__rela_iplt_end = .);
}
.rela.plt :
{
*(.rela.plt)
}
.init :
{
KEEP (*(SORT_NONE(.init)))
}
.plt : { *(.plt) }
.iplt : { *(.iplt) }
.text :
{
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
}
.fini :
{
KEEP (*(SORT_NONE(.fini)))
}
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
.sdata2 :
{
*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
}
.sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
.eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
.gnu_extab : ONLY_IF_RO { *(.gnu_extab*) }
/* These sections are generated by the Sun/Oracle C++ compiler. */
.exception_ranges : ONLY_IF_RO { *(.exception_ranges*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
/* Exception handling */
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
.gnu_extab : ONLY_IF_RW { *(.gnu_extab) }
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
.exception_ranges : ONLY_IF_RW { *(.exception_ranges*) }
/* Thread Local Storage sections */
.tdata :
{
PROVIDE_HIDDEN (__tdata_start = .);
*(.tdata .tdata.* .gnu.linkonce.td.*)
}
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
.jcr : { KEEP (*(.jcr)) }
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
.dynamic : { *(.dynamic) }
. = DATA_SEGMENT_RELRO_END (0, .);
.data :
{
__DATA_BEGIN__ = .;
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
.got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
__SDATA_BEGIN__ = .;
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*)
*(.sdata .sdata.* .gnu.linkonce.s.*)
}
_edata = .; PROVIDE (edata = .);
. = .;
__bss_start = .;
.sbss :
{
*(.dynsbss)
*(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon)
}
.bss :
{
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections.
FIXME: Why do we need it? When there is no .bss section, we do not
pad the .data section. */
. = ALIGN(. != 0 ? 64 / 8 : 1);
}
. = ALIGN(64 / 8);
. = SEGMENT_START("ldata-segment", .);
. = ALIGN(64 / 8);
__BSS_END__ = .;
__global_pointer = MIN(__SDATA_BEGIN__ + 0x800,
MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ - 0x800));
_end = .; PROVIDE (end = .);
. = DATA_SEGMENT_END (.);
/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
KEEP(*(.stack*))
}
__stack_usage = SIZEOF(.stack_dummy);
PROVIDE(__stack_top = 0xFF000000);
PROVIDE(__stack_size = 0x400);
PROVIDE(__stack = __stack_top);
ASSERT(__stack_usage <= __stack_size, "stack overflow")
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
.debug_addr 0 : { *(.debug_addr) }
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
}

View file

@ -71,9 +71,30 @@ inline uint64_t bit_getw(uint64_t bits, uint32_t start, uint32_t end) {
}
// Apply integer sign extension
inline uint32_t sext32(uint32_t word, uint32_t width) {
inline uint32_t sext(uint32_t word, uint32_t width) {
assert(width > 1);
assert(width <= 32);
uint32_t mask = (1 << width) - 1;
if (width == 32)
return word;
uint32_t mask = (uint32_t(1) << width) - 1;
return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word;
}
}
inline uint64_t sext(uint64_t word, uint32_t width) {
assert(width > 1);
assert(width <= 64);
if (width == 64)
return word;
uint64_t mask = (uint64_t(1) << width) - 1;
return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word;
}
inline __uint128_t sext(__uint128_t word, uint32_t width) {
assert(width > 1);
assert(width <= 128);
if (width == 128)
return word;
__uint128_t mask = (__uint128_t(1) << width) - 1;
return ((word >> (width - 1)) & 0x1) ? (word | ~mask) : word;
}

View file

@ -226,9 +226,9 @@ void RAM::read(void *data, uint64_t addr, uint64_t size) {
}
void RAM::write(const void *data, uint64_t addr, uint64_t size) {
const uint8_t* s = (const uint8_t*)data;
const uint8_t* d = (const uint8_t*)data;
for (uint64_t i = 0; i < size; i++) {
*this->get(addr + i) = s[i];
*this->get(addr + i) = d[i];
}
}
@ -276,7 +276,7 @@ void RAM::loadHexImage(const char* filename) {
ifs.seekg(0, ifs.beg);
ifs.read(content.data(), size);
int offset = 0;
uint32_t offset = 0;
char *line = content.data();
this->clear();

View file

@ -1,5 +1,6 @@
#pragma once
#include <cstdint>
#include <vector>
#include <unordered_map>
#include <cstdint>

View file

@ -8,10 +8,13 @@ extern "C" {
}
#define F32_SIGN 0x80000000
#define F64_SIGN 0x8000000000000000
inline float32_t to_float32_t(uint32_t x) { return float32_t{x}; }
inline float64_t to_float64_t(uint64_t x) { return float64_t{x}; }
inline uint32_t from_float32_t(float32_t x) { return uint32_t(x.v); }
inline uint64_t from_float64_t(float64_t x) { return uint64_t(x.v); }
inline uint32_t get_fflags() {
uint32_t fflags = softfloat_exceptionFlags;
@ -25,121 +28,290 @@ inline uint32_t get_fflags() {
extern "C" {
#endif
uint32_t rv_fadd(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
uint32_t rv_fadd_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_add(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fsub(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fadd_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_add(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fsub_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_sub(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fmul(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fsub_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_sub(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fmul_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_mul(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fmul_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_mul(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_mulAdd(to_float32_t(a), to_float32_t(b), to_float32_t(c));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
int c_neg = c ^ F32_SIGN;
auto r = f64_mulAdd(to_float64_t(a), to_float64_t(b), to_float64_t(c));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto c_neg = c ^ F32_SIGN;
auto r = f32_mulAdd(to_float32_t(a), to_float32_t(b), to_float32_t(c_neg));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fnmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
int a_neg = a ^ F32_SIGN;
int c_neg = c ^ F32_SIGN;
auto c_neg = c ^ F64_SIGN;
auto r = f64_mulAdd(to_float64_t(a), to_float64_t(b), to_float64_t(c_neg));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fnmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto a_neg = a ^ F32_SIGN;
auto c_neg = c ^ F32_SIGN;
auto r = f32_mulAdd(to_float32_t(a_neg), to_float32_t(b), to_float32_t(c_neg));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fnmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fnmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
int a_neg = a ^ F32_SIGN;
auto a_neg = a ^ F64_SIGN;
auto c_neg = c ^ F64_SIGN;
auto r = f64_mulAdd(to_float64_t(a_neg), to_float64_t(b), to_float64_t(c_neg));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fnmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto a_neg = a ^ F32_SIGN;
auto r = f32_mulAdd(to_float32_t(a_neg), to_float32_t(b), to_float32_t(c));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fdiv(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fnmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto a_neg = a ^ F64_SIGN;
auto r = f64_mulAdd(to_float64_t(a_neg), to_float64_t(b), to_float64_t(c));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fdiv_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_div(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_fsqrt(uint32_t a, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fdiv_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_div(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_fsqrt_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_sqrt(to_float32_t(a));
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_ftoi(uint32_t a, uint32_t frm, uint32_t* fflags) {
uint64_t rv_fsqrt_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_sqrt(to_float64_t(a));
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_ftoi_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_to_i32(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_ftou(uint32_t a, uint32_t frm, uint32_t* fflags) {
uint32_t rv_ftoi_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_i32(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_ftou_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_to_ui32(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_itof(uint32_t a, uint32_t frm, uint32_t* fflags) {
uint32_t rv_ftou_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_ui32(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftol_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_to_i64(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftol_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_i64(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftolu_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f32_to_ui64(to_float32_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint64_t rv_ftolu_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = f64_to_ui64(to_float64_t(a), frm, true);
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_itof_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i32_to_f32(a);
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_utof(uint32_t a, uint32_t frm, uint32_t* fflags) {
uint64_t rv_itof_d(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i32_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_utof_s(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui32_to_f32(a);
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint32_t rv_flt(uint32_t a, uint32_t b, uint32_t* fflags) {
uint64_t rv_utof_d(uint32_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui32_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_ltof_s(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i64_to_f32(a);
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint64_t rv_ltof_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = i64_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
uint32_t rv_lutof_s(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui64_to_f32(a);
if (fflags) { *fflags = get_fflags(); }
return from_float32_t(r);
}
uint64_t rv_lutof_d(uint64_t a, uint32_t frm, uint32_t* fflags) {
softfloat_roundingMode = frm;
auto r = ui64_to_f64(a);
if (fflags) { *fflags = get_fflags(); }
return from_float64_t(r);
}
bool rv_flt_s(uint32_t a, uint32_t b, uint32_t* fflags) {
auto r = f32_lt(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fle(uint32_t a, uint32_t b, uint32_t* fflags) {
bool rv_flt_d(uint64_t a, uint64_t b, uint32_t* fflags) {
auto r = f64_lt(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
bool rv_fle_s(uint32_t a, uint32_t b, uint32_t* fflags) {
auto r = f32_le(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_feq(uint32_t a, uint32_t b, uint32_t* fflags) {
bool rv_fle_d(uint64_t a, uint64_t b, uint32_t* fflags) {
auto r = f64_le(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
bool rv_feq_s(uint32_t a, uint32_t b, uint32_t* fflags) {
auto r = f32_eq(to_float32_t(a), to_float32_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fmin(uint32_t a, uint32_t b, uint32_t* fflags) {
int r;
bool rv_feq_d(uint64_t a, uint64_t b, uint32_t* fflags) {
auto r = f64_eq(to_float64_t(a), to_float64_t(b));
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fmin_s(uint32_t a, uint32_t b, uint32_t* fflags) {
uint32_t r;
if (isNaNF32UI(a) && isNaNF32UI(b)) {
r = defaultNaNF32UI;
} else {
@ -156,8 +328,26 @@ uint32_t rv_fmin(uint32_t a, uint32_t b, uint32_t* fflags) {
return r;
}
uint32_t rv_fmax(uint32_t a, uint32_t b, uint32_t* fflags) {
int r;
uint64_t rv_fmin_d(uint64_t a, uint64_t b, uint32_t* fflags) {
uint64_t r;
if (isNaNF64UI(a) && isNaNF64UI(b)) {
r = defaultNaNF64UI;
} else {
auto fa = to_float64_t(a);
auto fb = to_float64_t(b);
if ((f64_lt_quiet(fa, fb) || (f64_eq(fa, fb) && (a & F64_SIGN)))
|| isNaNF64UI(b)) {
r = a;
} else {
r = b;
}
}
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fmax_s(uint32_t a, uint32_t b, uint32_t* fflags) {
uint32_t r;
if (isNaNF32UI(a) && isNaNF32UI(b)) {
r = defaultNaNF32UI;
} else {
@ -174,7 +364,25 @@ uint32_t rv_fmax(uint32_t a, uint32_t b, uint32_t* fflags) {
return r;
}
uint32_t rv_fclss(uint32_t a) {
uint64_t rv_fmax_d(uint64_t a, uint64_t b, uint32_t* fflags) {
uint64_t r;
if (isNaNF64UI(a) && isNaNF64UI(b)) {
r = defaultNaNF64UI;
} else {
auto fa = to_float64_t(a);
auto fb = to_float64_t(b);
if ((f64_lt_quiet(fb, fa) || (f64_eq(fb, fa) && (b & F64_SIGN)))
|| isNaNF64UI(b)) {
r = a;
} else {
r = b;
}
}
if (fflags) { *fflags = get_fflags(); }
return r;
}
uint32_t rv_fclss_s(uint32_t a) {
auto infOrNaN = (0xff == expF32UI(a));
auto subnormOrZero = (0 == expF32UI(a));
bool sign = signF32UI(a);
@ -182,7 +390,7 @@ uint32_t rv_fclss(uint32_t a) {
bool isNaN = isNaNF32UI(a);
bool isSNaN = softfloat_isSigNaNF32UI(a);
int r =
uint32_t r =
( sign && infOrNaN && fracZero ) << 0 |
( sign && !infOrNaN && !subnormOrZero ) << 1 |
( sign && subnormOrZero && !fracZero ) << 2 |
@ -197,31 +405,77 @@ uint32_t rv_fclss(uint32_t a) {
return r;
}
uint32_t rv_fsgnj(uint32_t a, uint32_t b) {
int sign = b & F32_SIGN;
int r = sign | (a & ~F32_SIGN);
uint32_t rv_fclss_d(uint64_t a) {
auto infOrNaN = (0x7ff == expF64UI(a));
auto subnormOrZero = (0 == expF64UI(a));
bool sign = signF64UI(a);
bool fracZero = (0 == fracF64UI(a));
bool isNaN = isNaNF64UI(a);
bool isSNaN = softfloat_isSigNaNF64UI(a);
uint32_t r =
( sign && infOrNaN && fracZero ) << 0 |
( sign && !infOrNaN && !subnormOrZero ) << 1 |
( sign && subnormOrZero && !fracZero ) << 2 |
( sign && subnormOrZero && fracZero ) << 3 |
( !sign && infOrNaN && fracZero ) << 7 |
( !sign && !infOrNaN && !subnormOrZero ) << 6 |
( !sign && subnormOrZero && !fracZero ) << 5 |
( !sign && subnormOrZero && fracZero ) << 4 |
( isNaN && isSNaN ) << 8 |
( isNaN && !isSNaN ) << 9;
return r;
}
uint32_t rv_fsgnjn(uint32_t a, uint32_t b) {
int sign = ~b & F32_SIGN;
int r = sign | (a & ~F32_SIGN);
uint32_t rv_fsgnj_s(uint32_t a, uint32_t b) {
auto sign = b & F32_SIGN;
auto r = sign | (a & ~F32_SIGN);
return r;
}
uint32_t rv_fsgnjx(uint32_t a, uint32_t b) {
int sign1 = a & F32_SIGN;
int sign2 = b & F32_SIGN;
int r = (sign1 ^ sign2) | (a & ~F32_SIGN);
uint64_t rv_fsgnj_d(uint64_t a, uint64_t b) {
auto sign = b & F64_SIGN;
auto r = sign | (a & ~F64_SIGN);
return r;
}
uint32_t rv_fsgnjn_s(uint32_t a, uint32_t b) {
auto sign = ~b & F32_SIGN;
auto r = sign | (a & ~F32_SIGN);
return r;
}
uint64_t rv_fsgnjn_d(uint64_t a, uint64_t b) {
auto sign = ~b & F64_SIGN;
auto r = sign | (a & ~F64_SIGN);
return r;
}
uint32_t rv_fsgnjx_s(uint32_t a, uint32_t b) {
auto sign1 = a & F32_SIGN;
auto sign2 = b & F32_SIGN;
auto r = (sign1 ^ sign2) | (a & ~F32_SIGN);
return r;
}
uint64_t rv_fsgnjx_d(uint64_t a, uint64_t b) {
auto sign1 = a & F64_SIGN;
auto sign2 = b & F64_SIGN;
auto r = (sign1 ^ sign2) | (a & ~F64_SIGN);
return r;
}
uint32_t rv_dtof(uint64_t a) {
auto r = f64_to_f32(to_float64_t(a));
return from_float32_t(r);
}
uint64_t rv_ftod(uint32_t a) {
auto r = f32_to_f64(to_float32_t(a));
return from_float64_t(r);
}
#ifdef __cplusplus
}
#endif

View file

@ -7,32 +7,73 @@
extern "C" {
#endif
uint32_t rv_fadd(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsub(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmul(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fnmadd(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fnmsub(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fadd_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsub_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmul_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fnmadd_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fnmsub_s(uint32_t a, uint32_t b, uint32_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_fdiv_s(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsqrt_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fdiv(uint32_t a, uint32_t b, uint32_t frm, uint32_t* fflags);
uint32_t rv_fsqrt(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftoi_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftou_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_itof_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_utof_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftoi(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftou(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_itof(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_utof(uint32_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ftol_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ftolu_s(uint32_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ltof_s(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_lutof_s(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fclss(uint32_t a);
uint32_t rv_fsgnj(uint32_t a, uint32_t b);
uint32_t rv_fsgnjn(uint32_t a, uint32_t b);
uint32_t rv_fsgnjx(uint32_t a, uint32_t b);
uint32_t rv_fclss_s(uint32_t a);
uint32_t rv_flt(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fle(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_feq(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmin(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmax(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fsgnj_s(uint32_t a, uint32_t b);
uint32_t rv_fsgnjn_s(uint32_t a, uint32_t b);
uint32_t rv_fsgnjx_s(uint32_t a, uint32_t b);
bool rv_flt_s(uint32_t a, uint32_t b, uint32_t* fflags);
bool rv_fle_s(uint32_t a, uint32_t b, uint32_t* fflags);
bool rv_feq_s(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmin_s(uint32_t a, uint32_t b, uint32_t* fflags);
uint32_t rv_fmax_s(uint32_t a, uint32_t b, uint32_t* fflags);
///////////////////////////////////////////////////////////////////////////////
uint64_t rv_fadd_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fsub_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fmul_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fdiv_d(uint64_t a, uint64_t b, uint32_t frm, uint32_t* fflags);
uint64_t rv_fsqrt_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_fmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint64_t rv_fmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint64_t rv_fnmadd_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint64_t rv_fnmsub_d(uint64_t a, uint64_t b, uint64_t c, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftoi_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_ftou_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ftol_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ftolu_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_itof_d(uint32_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_utof_d(uint32_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_ltof_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint64_t rv_lutof_d(uint64_t a, uint32_t frm, uint32_t* fflags);
uint32_t rv_fclss_d(uint64_t a);
uint64_t rv_fsgnj_d(uint64_t a, uint64_t b);
uint64_t rv_fsgnjn_d(uint64_t a, uint64_t b);
uint64_t rv_fsgnjx_d(uint64_t a, uint64_t b);
bool rv_flt_d(uint64_t a, uint64_t b, uint32_t* fflags);
bool rv_fle_d(uint64_t a, uint64_t b, uint32_t* fflags);
bool rv_feq_d(uint64_t a, uint64_t b, uint32_t* fflags);
uint64_t rv_fmin_d(uint64_t a, uint64_t b, uint32_t* fflags);
uint64_t rv_fmax_d(uint64_t a, uint64_t b, uint32_t* fflags);
uint32_t rv_dtof(uint64_t a);
uint64_t rv_ftod(uint32_t a);
#ifdef __cplusplus
}

View file

@ -56,7 +56,7 @@ inline void Unpack8888(TexFormat format,
uint32_t texel,
uint32_t* lo,
uint32_t* hi) {
int r, g, b, a;
uint32_t r, g, b, a;
switch (format) {
case TexFormat::A8R8G8B8:
r = (texel >> 16) & 0xff;

View file

@ -29,6 +29,11 @@ else
CXXFLAGS += -O2 -DNDEBUG
endif
# XLEN parameterization
ifdef XLEN
CXXFLAGS += -DXLEN=$(XLEN)
endif
PROJECT = simx
all: $(DESTDIR)/$(PROJECT)
@ -43,4 +48,4 @@ $(DESTDIR)/lib$(PROJECT).so: $(SRCS)
$(CXX) $(CXXFLAGS) -MM $^ > .depend;
clean:
rm -rf obj_dir $(DESTDIR)/$(PROJECT) $(DESTDIR)/lib$(PROJECT).so
rm -rf obj_dir $(DESTDIR)/$(PROJECT) $(DESTDIR)/lib$(PROJECT).so

View file

@ -21,8 +21,7 @@ private:
uint16_t num_barriers_;
public:
ArchDef(const std::string& /*arch*/,
uint16_t num_cores,
ArchDef(uint16_t num_cores,
uint16_t num_warps,
uint16_t num_threads)
: num_cores_(num_cores)

View file

@ -488,11 +488,11 @@ private:
} else {
bool hit = false;
bool found_free_block = false;
int hit_block_id = 0;
int repl_block_id = 0;
uint32_t hit_block_id = 0;
uint32_t repl_block_id = 0;
uint32_t max_cnt = 0;
for (int i = 0, n = set.blocks.size(); i < n; ++i) {
for (uint32_t i = 0, n = set.blocks.size(); i < n; ++i) {
auto& block = set.blocks.at(i);
if (block.valid) {
if (block.tag == pipeline_req.tag) {

View file

@ -16,7 +16,7 @@ namespace vortex {
enum Constants {
SMEM_BANK_OFFSET = log2ceil(sizeof(Word)) + log2ceil(STACK_SIZE / sizeof(Word)),
SMEM_BANK_OFFSET = log2ceil(sizeof(uint32_t)) + log2ceil(STACK_SIZE / sizeof(uint32_t)),
};

View file

@ -13,7 +13,7 @@
using namespace vortex;
Core::Core(const SimContext& ctx, const ArchDef &arch, Word id)
Core::Core(const SimContext& ctx, const ArchDef &arch, uint32_t id)
: SimObject(ctx, "Core")
, MemRspPort(this)
, MemReqPort(this)
@ -73,7 +73,7 @@ Core::Core(const SimContext& ctx, const ArchDef &arch, Word id)
, decode_latch_("decode")
, pending_icache_(arch_.num_warps())
{
for (int i = 0; i < arch_.num_warps(); ++i) {
for (uint32_t i = 0; i < arch_.num_warps(); ++i) {
warps_.at(i) = std::make_shared<Warp>(this, i);
}
@ -195,7 +195,7 @@ void Core::tick() {
void Core::schedule() {
bool foundSchedule = false;
int scheduled_warp = last_schedule_wid_;
uint32_t scheduled_warp = last_schedule_wid_;
// round robin scheduling
for (size_t wid = 0, nw = arch_.num_warps(); wid < nw; ++wid) {
@ -367,11 +367,11 @@ void Core::commit() {
}
}
WarpMask Core::wspawn(int num_warps, int nextPC) {
WarpMask Core::wspawn(uint32_t num_warps, uint32_t nextPC) {
WarpMask ret(1);
int active_warps = std::min<int>(num_warps, arch_.num_warps());
uint32_t active_warps = std::min<uint32_t>(num_warps, arch_.num_warps());
DP(3, "*** Activate " << (active_warps-1) << " warps at PC: " << std::hex << nextPC);
for (int i = 1; i < active_warps; ++i) {
for (uint32_t i = 1; i < active_warps; ++i) {
auto warp = warps_.at(i);
warp->setPC(nextPC);
warp->setTmask(0, true);
@ -380,7 +380,7 @@ WarpMask Core::wspawn(int num_warps, int nextPC) {
return ret;
}
WarpMask Core::barrier(int bar_id, int count, int warp_id) {
WarpMask Core::barrier(uint32_t bar_id, uint32_t count, uint32_t warp_id) {
WarpMask ret(0);
auto& barrier = barriers_.at(bar_id);
barrier.set(warp_id);
@ -389,7 +389,7 @@ WarpMask Core::barrier(int bar_id, int count, int warp_id) {
DP(3, "*** Suspend warp #" << warp_id << " at barrier #" << bar_id);
return ret;
}
for (int i = 0; i < arch_.num_warps(); ++i) {
for (uint32_t i = 0; i < arch_.num_warps(); ++i) {
if (barrier.test(i)) {
DP(3, "*** Resume warp #" << i << " at barrier #" << bar_id);
warps_.at(i)->activate();
@ -400,45 +400,45 @@ WarpMask Core::barrier(int bar_id, int count, int warp_id) {
return ret;
}
Word Core::icache_read(Addr addr, Size size) {
Word data;
mmu_.read(&data, addr, size, 0);
return data;
void Core::icache_read(void *data, uint64_t addr, uint32_t size) {
mmu_.read(data, addr, size, 0);
}
Word Core::dcache_read(Addr addr, Size size) {
Word data;
void Core::dcache_read(void *data, uint64_t addr, uint32_t size) {
auto type = get_addr_type(addr, size);
if (type == AddrType::Shared) {
smem_.read(&data, addr & (SMEM_SIZE-1), size);
addr &= (SMEM_SIZE-1);
smem_.read(data, addr, size);
} else {
mmu_.read(&data, addr, size, 0);
mmu_.read(data, addr, size, 0);
}
return data;
}
void Core::dcache_write(Addr addr, Word data, Size size) {
void Core::dcache_write(const void* data, uint64_t addr, uint32_t size) {
if (addr >= IO_COUT_ADDR
&& addr < (IO_COUT_ADDR + IO_COUT_SIZE)) {
this->writeToStdOut(addr, data);
&& addr <= (IO_COUT_ADDR + IO_COUT_SIZE - 1)) {
this->writeToStdOut(data, addr, size);
} else {
auto type = get_addr_type(addr, size);
if (type == AddrType::Shared) {
smem_.write(&data, addr & (SMEM_SIZE-1), size);
addr &= (SMEM_SIZE-1);
smem_.write(data, addr, size);
} else {
mmu_.write(&data, addr, size, 0);
mmu_.write(data, addr, size, 0);
}
}
}
Word Core::tex_read(uint32_t unit, Word u, Word v, Word lod, std::vector<mem_addr_size_t>* mem_addrs) {
uint32_t Core::tex_read(uint32_t unit, uint32_t u, uint32_t v, uint32_t lod, std::vector<mem_addr_size_t>* mem_addrs) {
return tex_units_.at(unit).read(u, v, lod, mem_addrs);
}
void Core::writeToStdOut(Addr addr, Word data) {
void Core::writeToStdOut(const void* data, uint64_t addr, uint32_t size) {
if (size != 1)
std::abort();
uint32_t tid = (addr - IO_COUT_ADDR) & (IO_COUT_SIZE-1);
auto& ss_buf = print_bufs_[tid];
char c = (char)data;
char c = *(char*)data;
ss_buf << c;
if (c == '\n') {
std::cout << std::dec << "#" << tid << ": " << ss_buf.str() << std::flush;
@ -446,7 +446,7 @@ void Core::writeToStdOut(Addr addr, Word data) {
}
}
Word Core::get_csr(Addr addr, int tid, int wid) {
uint32_t Core::get_csr(uint32_t addr, uint32_t tid, uint32_t wid) {
switch (addr) {
case CSR_SATP:
case CSR_PMPCFG0:
@ -502,13 +502,13 @@ Word Core::get_csr(Addr addr, int tid, int wid) {
return perf_stats_.instrs & 0xffffffff;
case CSR_MINSTRET_H:
// NumInsts
return (Word)(perf_stats_.instrs >> 32);
return (uint32_t)(perf_stats_.instrs >> 32);
case CSR_MCYCLE:
// NumCycles
return (Word)SimPlatform::instance().cycles();
return (uint32_t)SimPlatform::instance().cycles();
case CSR_MCYCLE_H:
// NumCycles
return (Word)(SimPlatform::instance().cycles() >> 32);
return (uint32_t)(SimPlatform::instance().cycles() >> 32);
case CSR_MPM_IBUF_ST:
return perf_stats_.ibuf_stalls & 0xffffffff;
case CSR_MPM_IBUF_ST_H:
@ -644,7 +644,7 @@ Word Core::get_csr(Addr addr, int tid, int wid) {
return 0;
}
void Core::set_csr(Addr addr, Word value, int /*tid*/, int wid) {
void Core::set_csr(uint32_t addr, uint32_t value, uint32_t /*tid*/, uint32_t wid) {
if (addr == CSR_FFLAGS) {
fcsrs_.at(wid) = (fcsrs_.at(wid) & ~0x1F) | (value & 0x1F);
} else if (addr == CSR_FRM) {

View file

@ -68,7 +68,7 @@ public:
SimPort<MemRsp> MemRspPort;
SimPort<MemReq> MemReqPort;
Core(const SimContext& ctx, const ArchDef &arch, Word id);
Core(const SimContext& ctx, const ArchDef &arch, uint32_t id);
~Core();
void attach_ram(RAM* ram);
@ -79,7 +79,7 @@ public:
void tick();
Word id() const {
uint32_t id() const {
return id_;
}
@ -95,25 +95,25 @@ public:
return perf_stats_;
}
Word getIRegValue(int reg) const {
uint32_t getIRegValue(int reg) const {
return warps_.at(0)->getIRegValue(reg);
}
Word get_csr(Addr addr, int tid, int wid);
uint32_t get_csr(uint32_t addr, uint32_t tid, uint32_t wid);
void set_csr(Addr addr, Word value, int tid, int wid);
void set_csr(uint32_t addr, uint32_t value, uint32_t tid, uint32_t wid);
WarpMask wspawn(int num_warps, int nextPC);
WarpMask wspawn(uint32_t num_warps, uint32_t nextPC);
WarpMask barrier(int bar_id, int count, int warp_id);
WarpMask barrier(uint32_t bar_id, uint32_t count, uint32_t warp_id);
Word icache_read(Addr, Size);
void icache_read(void* data, uint64_t addr, uint32_t size);
Word dcache_read(Addr, Size);
void dcache_read(void* data, uint64_t addr, uint32_t size);
void dcache_write(Addr, Word, Size);
void dcache_write(const void* data, uint64_t addr, uint32_t size);
Word tex_read(uint32_t unit, Word lod, Word u, Word v, std::vector<mem_addr_size_t>* mem_addrs);
uint32_t tex_read(uint32_t unit, uint32_t lod, uint32_t u, uint32_t v, std::vector<mem_addr_size_t>* mem_addrs);
void trigger_ecall();
@ -129,11 +129,11 @@ private:
void execute();
void commit();
void writeToStdOut(Addr addr, Word data);
void writeToStdOut(const void* data, uint64_t addr, uint32_t size);
void cout_flush();
Word id_;
uint32_t id_;
const ArchDef arch_;
const Decoder decoder_;
MemoryUnit mmu_;
@ -142,7 +142,7 @@ private:
std::vector<std::shared_ptr<Warp>> warps_;
std::vector<WarpMask> barriers_;
std::vector<Word> csrs_;
std::vector<uint32_t> csrs_;
std::vector<Byte> fcsrs_;
std::vector<IBuffer> ibuffers_;
Scoreboard scoreboard_;

View file

@ -19,7 +19,7 @@ struct InstTableEntry_t {
InstType iType;
};
static const std::unordered_map<int, struct InstTableEntry_t> sc_instTable = {
static const std::unordered_map<Opcode, struct InstTableEntry_t> sc_instTable = {
{Opcode::NOP, {false, InstType::N_TYPE}},
{Opcode::R_INST, {false, InstType::R_TYPE}},
{Opcode::L_INST, {false, InstType::I_TYPE}},
@ -42,15 +42,54 @@ static const std::unordered_map<int, struct InstTableEntry_t> sc_instTable = {
{Opcode::VSET, {false, InstType::V_TYPE}},
{Opcode::GPGPU, {false, InstType::R_TYPE}},
{Opcode::GPU, {false, InstType::R4_TYPE}},
{Opcode::R_INST_W, {false, InstType::R_TYPE}},
{Opcode::I_INST_W, {false, InstType::I_TYPE}},
};
enum Constants {
width_opcode= 7,
width_reg = 5,
width_func2 = 2,
width_func3 = 3,
width_func6 = 6,
width_func7 = 7,
width_mop = 3,
width_vmask = 1,
width_i_imm = 12,
width_j_imm = 20,
width_v_imm = 11,
shift_opcode= 0,
shift_rd = width_opcode,
shift_func3 = shift_rd + width_reg,
shift_rs1 = shift_func3 + width_func3,
shift_rs2 = shift_rs1 + width_reg,
shift_func2 = shift_rs2 + width_reg,
shift_func7 = shift_rs2 + width_reg,
shift_rs3 = shift_func7 + width_func2,
shift_vmop = shift_func7 + width_vmask,
shift_vnf = shift_vmop + width_mop,
shift_func6 = shift_func7 + width_vmask,
shift_vset = shift_func7 + width_func6,
mask_opcode = (1<<width_opcode)-1,
mask_reg = (1<<width_reg)-1,
mask_func2 = (1<<width_func2)-1,
mask_func3 = (1<<width_func3)-1,
mask_func6 = (1<<width_func6)-1,
mask_func7 = (1<<width_func7)-1,
mask_i_imm = (1<<width_i_imm)-1,
mask_j_imm = (1<<width_j_imm)-1,
mask_v_imm = (1<<width_v_imm)-1,
};
static const char* op_string(const Instr &instr) {
auto opcode = instr.getOpcode();
Word func2 = instr.getFunc2();
Word func3 = instr.getFunc3();
Word func7 = instr.getFunc7();
Word rs2 = instr.getRSrc(1);
Word imm = instr.getImm();
auto func2 = instr.getFunc2();
auto func3 = instr.getFunc3();
auto func7 = instr.getFunc7();
auto rs2 = instr.getRSrc(1);
auto imm = instr.getImm();
switch (opcode) {
case Opcode::NOP: return "NOP";
@ -115,8 +154,10 @@ static const char* op_string(const Instr &instr) {
case 0: return "LBI";
case 1: return "LHI";
case 2: return "LW";
case 3: return "LD";
case 4: return "LBU";
case 5: return "LHU";
case 6: return "LWU";
default:
std::abort();
}
@ -125,9 +166,38 @@ static const char* op_string(const Instr &instr) {
case 0: return "SB";
case 1: return "SH";
case 2: return "SW";
case 3: return "SD";
default:
std::abort();
}
case Opcode::R_INST_W:
if (func7 & 0x1){
switch (func3) {
case 0: return "MULW";
case 4: return "DIVW";
case 5: return "DIVUW";
case 6: return "REMW";
case 7: return "REMUW";
default:
std::abort();
}
} else {
switch (func3) {
case 0: return func7 ? "SUBW" : "ADDW";
case 1: return "SLLW";
case 5: return func7 ? "SRAW" : "SRLW";
default:
std::abort();
}
}
case Opcode::I_INST_W:
switch (func3) {
case 0: return "ADDIW";
case 1: return "SLLIW";
case 5: return func7 ? "SRAIW" : "SRLIW";
default:
std::abort();
}
case Opcode::SYS_INST:
switch (func3) {
case 0:
@ -150,49 +220,129 @@ static const char* op_string(const Instr &instr) {
std::abort();
}
case Opcode::FENCE: return "FENCE";
case Opcode::FL: return (func3 == 0x2) ? "FL" : "VL";
case Opcode::FS: return (func3 == 0x2) ? "FS" : "VS";
case Opcode::FL:
switch (func3) {
case 0x1: return "VL";
case 0x2: return "FLW";
case 0x3: return "FLD";
default:
std::abort();
}
case Opcode::FS:
switch (func3) {
case 0x1: return "VS";
case 0x2: return "FSW";
case 0x3: return "FSD";
default:
std::abort();
}
case Opcode::FCI:
switch (func7) {
case 0x00: return "FADD";
case 0x04: return "FSUB";
case 0x08: return "FMUL";
case 0x0c: return "FDIV";
case 0x2c: return "FSQRT";
case 0x00: return "FADD.S";
case 0x01: return "FADD.D";
case 0x04: return "FSUB.S";
case 0x05: return "FSUB.D";
case 0x08: return "FMUL.S";
case 0x09: return "FMUL.D";
case 0x0c: return "FDIV.S";
case 0x0d: return "FDIV.D";
case 0x2c: return "FSQRT.S";
case 0x2d: return "FSQRT.D";
case 0x10:
switch (func3) {
case 0: return "FSGNJ";
case 1: return "FSGNJN";
case 2: return "FSGNJX";
case 0: return "FSGNJ.S";
case 1: return "FSGNJN.S";
case 2: return "FSGNJX.S";
default:
std::abort();
}
case 0x11:
switch (func3) {
case 0: return "FSGNJ.D";
case 1: return "FSGNJN.D";
case 2: return "FSGNJX.D";
default:
std::abort();
}
case 0x14:
switch (func3) {
case 0: return "FMIM";
case 1: return "FMAX";
case 0: return "FMIN.S";
case 1: return "FMAX.S";
default:
std::abort();
}
case 0x15:
switch (func3) {
case 0: return "FMIN.D";
case 1: return "FMAX.D";
default:
std::abort();
}
case 0x20: return "FCVT.S.D";
case 0x21: return "FCVT.D.S";
case 0x50:
switch (func3) {
case 0: return "FLE";
case 1: return "FLT";
case 2: return "FEQ";
case 0: return "FLE.S";
case 1: return "FLT.S";
case 2: return "FEQ.S";
default:
std::abort();
}
case 0x60: return rs2 ? "FCVT.WU.S" : "FCVT.W.S";
case 0x68: return rs2 ? "FCVT.S.WU" : "FCVT.S.W";
case 0x70: return func3 ? "FLASS" : "FMV.X.W";
case 0x51:
switch (func3) {
case 0: return "FLE.D";
case 1: return "FLT.D";
case 2: return "FEQ.D";
default:
std::abort();
}
case 0x60:
switch (rs2) {
case 0: return "FCVT.W.S";
case 1: return "FCVT.WU.S";
case 2: return "FCVT.L.S";
case 3: return "FCVT.LU.S";
default:
std::abort();
}
case 0x61:
switch (rs2) {
case 0: return "FCVT.W.D";
case 1: return "FCVT.WU.D";
case 2: return "FCVT.L.D";
case 3: return "FCVT.LU.D";
default:
std::abort();
}
case 0x68:
switch (rs2) {
case 0: return "FCVT.S.W";
case 1: return "FCVT.S.WU";
case 2: return "FCVT.S.L";
case 3: return "FCVT.S.LU";
default:
std::abort();
}
case 0x69:
switch (rs2) {
case 0: return "FCVT.D.W";
case 1: return "FCVT.D.WU";
case 2: return "FCVT.D.L";
case 3: return "FCVT.D.LU";
default:
std::abort();
}
case 0x70: return func3 ? "FCLASS.S" : "FMV.X.W";
case 0x71: return func3 ? "FCLASS.D" : "FMV.X.D";
case 0x78: return "FMV.W.X";
case 0x79: return "FMV.D.X";
default:
std::abort();
}
case Opcode::FMADD: return "FMADD";
case Opcode::FMSUB: return "FMSUB";
case Opcode::FMNMADD: return "FMNMADD";
case Opcode::FMNMSUB: return "FMNMSUB";
case Opcode::FMADD: return func2 ? "FMADD.D" : "FMADD.S";
case Opcode::FMSUB: return func2 ? "FMSUB.D" : "FMSUB.S";
case Opcode::FMNMADD: return func2 ? "FNMADD.D" : "FNMADD.S";
case Opcode::FMNMSUB: return func2 ? "FNMSUB.D" : "FNMSUB.S";
case Opcode::VSET: return "VSET";
case Opcode::GPGPU:
switch (func3) {
@ -226,8 +376,8 @@ static const char* op_string(const Instr &instr) {
namespace vortex {
std::ostream &operator<<(std::ostream &os, const Instr &instr) {
auto opcode = instr.getOpcode();
Word func2 = instr.getFunc2();
Word func3 = instr.getFunc3();
auto func2 = instr.getFunc2();
auto func3 = instr.getFunc3();
os << op_string(instr) << ": ";
@ -244,7 +394,7 @@ std::ostream &operator<<(std::ostream &os, const Instr &instr) {
if (instr.getRDType() != RegType::None) {
os << instr.getRDType() << std::dec << instr.getRDest() << " <- ";
}
int i = 0;
uint32_t i = 0;
for (; i < instr.getNRSrc(); ++i) {
if (i) os << ", ";
os << instr.getRSType(i) << std::dec << instr.getRSrc(i);
@ -261,56 +411,22 @@ std::ostream &operator<<(std::ostream &os, const Instr &instr) {
}
}
Decoder::Decoder(const ArchDef &arch) {
inst_s_ = arch.wsize() * 8;
opcode_s_ = 7;
reg_s_ = 5;
func2_s_ = 2;
func3_s_ = 3;
mop_s_ = 3;
vmask_s_ = 1;
Decoder::Decoder(const ArchDef&) {}
shift_opcode_ = 0;
shift_rd_ = opcode_s_;
shift_func3_ = shift_rd_ + reg_s_;
shift_rs1_ = shift_func3_ + func3_s_;
shift_rs2_ = shift_rs1_ + reg_s_;
shift_func2_ = shift_rs2_ + reg_s_;
shift_func7_ = shift_rs2_ + reg_s_;
shift_rs3_ = shift_func7_ + func2_s_;
shift_vmop_ = shift_func7_ + vmask_s_;
shift_vnf_ = shift_vmop_ + mop_s_;
shift_func6_ = shift_func7_ + 1;
shift_vset_ = shift_func7_ + 6;
reg_mask_ = 0x1f;
func2_mask_ = 0x3;
func3_mask_ = 0x7;
func6_mask_ = 0x3f;
func7_mask_ = 0x7f;
opcode_mask_ = 0x7f;
i_imm_mask_ = 0xfff;
s_imm_mask_ = 0xfff;
b_imm_mask_ = 0x1fff;
u_imm_mask_ = 0xfffff;
j_imm_mask_ = 0xfffff;
v_imm_mask_ = 0x7ff;
}
std::shared_ptr<Instr> Decoder::decode(Word code) const {
std::shared_ptr<Instr> Decoder::decode(uint32_t code) const {
auto instr = std::make_shared<Instr>();
Opcode op = (Opcode)((code >> shift_opcode_) & opcode_mask_);
auto op = Opcode((code >> shift_opcode) & mask_opcode);
instr->setOpcode(op);
Word func2 = (code >> shift_func2_) & func2_mask_;
Word func3 = (code >> shift_func3_) & func3_mask_;
Word func6 = (code >> shift_func6_) & func6_mask_;
Word func7 = (code >> shift_func7_) & func7_mask_;
auto func2 = (code >> shift_func2) & mask_func2;
auto func3 = (code >> shift_func3) & mask_func3;
auto func6 = (code >> shift_func6) & mask_func6;
auto func7 = (code >> shift_func7) & mask_func7;
int rd = (code >> shift_rd_) & reg_mask_;
int rs1 = (code >> shift_rs1_) & reg_mask_;
int rs2 = (code >> shift_rs2_) & reg_mask_;
int rs3 = (code >> shift_rs3_) & reg_mask_;
auto rd = (code >> shift_rd) & mask_reg;
auto rs1 = (code >> shift_rs1) & mask_reg;
auto rs2 = (code >> shift_rs2) & mask_reg;
auto rs3 = (code >> shift_rs3) & mask_reg;
auto op_it = sc_instTable.find(op);
if (op_it == sc_instTable.end()) {
@ -320,7 +436,7 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
auto iType = op_it->second.iType;
if (op == Opcode::FL || op == Opcode::FS) {
if (func3 != 0x2) {
if (func3 != 0x2 && func3 != 0x3) {
iType = InstType::V_TYPE;
}
}
@ -330,40 +446,57 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
break;
case InstType::R_TYPE:
if (op == Opcode::FCI) {
switch (func7) {
case 0x68: // FCVT.S.W, FCVT.S.WU
if (op == Opcode::FCI) {
switch (func7) {
case 0x50: // FLE.S, FLT.S, FEQ.S
case 0x51: // FLE.D, FLT.D, FEQ.D
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Float);
instr->setSrcReg(rs2, RegType::Float);
break;
case 0x60: // FCVT.W.D, FCVT.WU.D, FCVT.L.D, FCVT.LU.D
case 0x61: // FCVT.WU.S, FCVT.W.S, FCVT.L.S, FCVT.LU.S
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Float);
instr->setSrcReg(rs2, RegType::Integer);
break;
case 0x68: // FCVT.S.W, FCVT.S.WU, FCVT.S.L, FCVT.S.LU
case 0x69: // FCVT.D.W, FCVT.D.WU, FCVT.D.L, FCVT.D.LU
instr->setDestReg(rd, RegType::Float);
instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2, RegType::Integer);
break;
case 0x70: // FCLASS.S, FMV.X.W
case 0x71: // FCLASS.D, FMV.X.D
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Float);
break;
case 0x78: // FMV.W.X
instr->setSrcReg(rs1);
case 0x79: // FMV.D.X
instr->setDestReg(rd, RegType::Float);
instr->setSrcReg(rs1, RegType::Integer);
break;
default:
instr->setSrcFReg(rs1);
}
instr->setSrcFReg(rs2);
switch (func7) {
case 0x50: // FLE, FLT, FEQ
case 0x60: // FCVT.WU.S, FCVT.W.S
case 0x70: // FLASS, FMV.X.W
instr->setDestReg(rd);
instr->setDestReg(rd, RegType::Float);
instr->setSrcReg(rs1, RegType::Float);
instr->setSrcReg(rs2, RegType::Float);
break;
default:
instr->setDestFReg(rd);
}
} else {
instr->setDestReg(rd);
instr->setSrcReg(rs1);
instr->setSrcReg(rs2);
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2, RegType::Integer);
}
instr->setFunc3(func3);
instr->setFunc7(func7);
break;
case InstType::I_TYPE: {
instr->setSrcReg(rs1);
instr->setSrcReg(rs1, RegType::Integer);
if (op == Opcode::FL) {
instr->setDestFReg(rd);
instr->setDestReg(rd, RegType::Float);
} else {
instr->setDestReg(rd);
instr->setDestReg(rd, RegType::Integer);
}
instr->setFunc3(func3);
instr->setFunc7(func7);
@ -371,64 +504,71 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
case Opcode::SYS_INST:
case Opcode::FENCE:
// uint12
instr->setImm(code >> shift_rs2_);
instr->setImm(code >> shift_rs2);
break;
case Opcode::I_INST:
case Opcode::I_INST_W:
if (func3 == 0x1 || func3 == 0x5) {
// int5
instr->setImm(sext32(rs2, 5));
auto shamt = rs2; // uint5
#if (XLEN == 64)
if (op == Opcode::I_INST) {
// uint6
shamt |= ((func7 & 0x1) << 5);
}
#endif
instr->setImm(shamt);
} else {
// int12
instr->setImm(sext32(code >> shift_rs2_, 12));
auto imm = code >> shift_rs2;
instr->setImm(sext(imm, width_i_imm));
}
break;
default:
// int12
instr->setImm(sext32(code >> shift_rs2_, 12));
auto imm = code >> shift_rs2;
instr->setImm(sext(imm, width_i_imm));
break;
}
} break;
case InstType::S_TYPE: {
instr->setSrcReg(rs1);
instr->setSrcReg(rs1, RegType::Integer);
if (op == Opcode::FS) {
instr->setSrcFReg(rs2);
instr->setSrcReg(rs2, RegType::Float);
} else {
instr->setSrcReg(rs2);
instr->setSrcReg(rs2, RegType::Integer);
}
instr->setFunc3(func3);
Word imm = (func7 << reg_s_) | rd;
instr->setImm(sext32(imm, 12));
auto imm = (func7 << width_reg) | rd;
instr->setImm(sext(imm, width_i_imm));
} break;
case InstType::B_TYPE: {
instr->setSrcReg(rs1);
instr->setSrcReg(rs2);
instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2, RegType::Integer);
instr->setFunc3(func3);
Word bit_11 = rd & 0x1;
Word bits_4_1 = rd >> 1;
Word bit_10_5 = func7 & 0x3f;
Word bit_12 = func7 >> 6;
Word imm = (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
instr->setImm(sext32(imm, 13));
auto bit_11 = rd & 0x1;
auto bits_4_1 = rd >> 1;
auto bit_10_5 = func7 & 0x3f;
auto bit_12 = func7 >> 6;
auto imm = (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
instr->setImm(sext(imm, width_i_imm+1));
} break;
case InstType::U_TYPE:
instr->setDestReg(rd);
instr->setImm(sext32(code >> shift_func3_, 20));
break;
case InstType::U_TYPE: {
instr->setDestReg(rd, RegType::Integer);
auto imm = code >> shift_func3;
instr->setImm(sext(imm, width_j_imm));
} break;
case InstType::J_TYPE: {
instr->setDestReg(rd);
Word unordered = code >> shift_func3_;
Word bits_19_12 = unordered & 0xff;
Word bit_11 = (unordered >> 8) & 0x1;
Word bits_10_1 = (unordered >> 9) & 0x3ff;
Word bit_20 = (unordered >> 19) & 0x1;
Word imm = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
if (bit_20) {
imm |= ~j_imm_mask_;
}
instr->setImm(imm);
instr->setDestReg(rd, RegType::Integer);
auto unordered = code >> shift_func3;
auto bits_19_12 = unordered & 0xff;
auto bit_11 = (unordered >> 8) & 0x1;
auto bits_10_1 = (unordered >> 9) & 0x3ff;
auto bit_20 = (unordered >> 19) & 0x1;
auto imm = (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
instr->setImm(sext(imm, width_j_imm+1));
} break;
case InstType::V_TYPE:
@ -438,9 +578,9 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
instr->setSrcVReg(rs1);
instr->setFunc3(func3);
if (func3 == 7) {
instr->setImm(!(code >> shift_vset_));
instr->setImm(!(code >> shift_vset));
if (instr->getImm()) {
Word immed = (code >> shift_rs2_) & v_imm_mask_;
auto immed = (code >> shift_rs2) & mask_v_imm;
instr->setImm(immed);
instr->setVlmul(immed & 0x3);
instr->setVediv((immed >> 4) & 0x3);
@ -450,7 +590,7 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
}
} else {
instr->setSrcVReg(rs2);
instr->setVmask((code >> shift_func7_) & 0x1);
instr->setVmask((code >> shift_func7) & 0x1);
instr->setFunc6(func6);
}
} break;
@ -460,9 +600,9 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
instr->setSrcVReg(rs1);
instr->setVlsWidth(func3);
instr->setSrcVReg(rs2);
instr->setVmask(code >> shift_func7_);
instr->setVmop((code >> shift_vmop_) & func3_mask_);
instr->setVnf((code >> shift_vnf_) & func3_mask_);
instr->setVmask(code >> shift_func7);
instr->setVmop((code >> shift_vmop) & mask_func3);
instr->setVnf((code >> shift_vnf) & mask_func3);
break;
case Opcode::FS:
@ -470,9 +610,9 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
instr->setSrcVReg(rs1);
instr->setVlsWidth(func3);
instr->setSrcVReg(rs2);
instr->setVmask(code >> shift_func7_);
instr->setVmop((code >> shift_vmop_) & func3_mask_);
instr->setVnf((code >> shift_vnf_) & func3_mask_);
instr->setVmask(code >> shift_func7);
instr->setVmop((code >> shift_vmop) & mask_func3);
instr->setVnf((code >> shift_vnf) & mask_func3);
break;
default:
@ -481,15 +621,15 @@ std::shared_ptr<Instr> Decoder::decode(Word code) const {
break;
case R4_TYPE:
if (op == Opcode::GPU) {
instr->setDestReg(rd);
instr->setSrcReg(rs1);
instr->setSrcReg(rs2);
instr->setSrcReg(rs3);
instr->setDestReg(rd, RegType::Integer);
instr->setSrcReg(rs1, RegType::Integer);
instr->setSrcReg(rs2, RegType::Integer);
instr->setSrcReg(rs3, RegType::Integer);
} else {
instr->setDestFReg(rd);
instr->setSrcFReg(rs1);
instr->setSrcFReg(rs2);
instr->setSrcFReg(rs3);
instr->setDestReg(rd, RegType::Float);
instr->setSrcReg(rs1, RegType::Float);
instr->setSrcReg(rs2, RegType::Float);
instr->setSrcReg(rs3, RegType::Float);
}
instr->setFunc2(func2);
instr->setFunc3(func3);

View file

@ -7,55 +7,12 @@ namespace vortex {
class ArchDef;
class Instr;
class Pipeline;
class Decoder {
public:
Decoder(const ArchDef &);
std::shared_ptr<Instr> decode(Word code) const;
private:
Word inst_s_;
Word opcode_s_;
Word reg_s_;
Word func2_s_;
Word func3_s_;
Word shift_opcode_;
Word shift_rd_;
Word shift_rs1_;
Word shift_rs2_;
Word shift_rs3_;
Word shift_func2_;
Word shift_func3_;
Word shift_func7_;
Word shift_j_u_immed_;
Word shift_s_b_immed_;
Word shift_i_immed_;
Word reg_mask_;
Word func2_mask_;
Word func3_mask_;
Word func6_mask_;
Word func7_mask_;
Word opcode_mask_;
Word i_imm_mask_;
Word s_imm_mask_;
Word b_imm_mask_;
Word u_imm_mask_;
Word j_imm_mask_;
Word v_imm_mask_;
//Vector
Word shift_vset_;
Word shift_vset_immed_;
Word shift_vmask_;
Word shift_vmop_;
Word shift_vnf_;
Word shift_func6_;
Word vmask_s_;
Word mop_s_;
std::shared_ptr<Instr> decode(uint32_t code) const;
};
}

File diff suppressed because it is too large Load diff

View file

@ -114,8 +114,8 @@ void LsuUnit::tick() {
// duplicates detection
bool is_dup = false;
if (trace->tmask.test(0)) {
uint64_t addr_mask = sizeof(Word)-1;
Word addr0 = trace->mem_addrs.at(0).at(0).addr & ~addr_mask;
uint64_t addr_mask = sizeof(uint32_t)-1;
uint32_t addr0 = trace->mem_addrs.at(0).at(0).addr & ~addr_mask;
uint32_t matches = 1;
for (uint32_t t = 1; t < num_threads_; ++t) {
if (!trace->tmask.test(t))

View file

@ -32,6 +32,9 @@ enum Opcode {
// GPGPU Extension
GPGPU = 0x6b,
GPU = 0x5b,
// RV64 Standard Extensions
R_INST_W = 0x3b,
I_INST_W = 0x1b,
};
enum InstType {
@ -54,56 +57,54 @@ public:
, has_imm_(false)
, rdest_type_(RegType::None)
, rdest_(0)
, func2_(0)
, func3_(0)
, func6_(0)
, func7_(0) {
for (int i = 0; i < MAX_REG_SOURCES; ++i) {
for (uint32_t i = 0; i < MAX_REG_SOURCES; ++i) {
rsrc_type_[i] = RegType::None;
}
}
/* Setters used to "craft" the instruction. */
void setOpcode(Opcode opcode) { opcode_ = opcode; }
void setDestReg(int destReg) { rdest_type_ = RegType::Integer; rdest_ = destReg; }
void setSrcReg(int srcReg) { rsrc_type_[num_rsrcs_] = RegType::Integer; rsrc_[num_rsrcs_++] = srcReg; }
void setDestFReg(int destReg) { rdest_type_ = RegType::Float; rdest_ = destReg; }
void setSrcFReg(int srcReg) { rsrc_type_[num_rsrcs_] = RegType::Float; rsrc_[num_rsrcs_++] = srcReg; }
void setDestVReg(int destReg) { rdest_type_ = RegType::Vector; rdest_ = destReg; }
void setSrcVReg(int srcReg) { rsrc_type_[num_rsrcs_] = RegType::Vector; rsrc_[num_rsrcs_++] = srcReg; }
void setFunc2(Word func2) { func2_ = func2; }
void setFunc3(Word func3) { func3_ = func3; }
void setFunc7(Word func7) { func7_ = func7; }
void setImm(Word imm) { has_imm_ = true; imm_ = imm; }
void setVlsWidth(Word width) { vlsWidth_ = width; }
void setVmop(Word mop) { vMop_ = mop; }
void setVnf(Word nf) { vNf_ = nf; }
void setVmask(Word mask) { vmask_ = mask; }
void setVs3(Word vs) { vs3_ = vs; }
void setVlmul(Word lmul) { vlmul_ = 1 << lmul; }
void setVsew(Word sew) { vsew_ = 1 << (3+sew); }
void setVediv(Word ediv) { vediv_ = 1 << ediv; }
void setFunc6(Word func6) { func6_ = func6; }
void setDestReg(uint32_t destReg, RegType type) { rdest_type_ = type; rdest_ = destReg; }
void setSrcReg(uint32_t srcReg, RegType type) { rsrc_type_[num_rsrcs_] = type; rsrc_[num_rsrcs_++] = srcReg; }
void setDestVReg(uint32_t destReg) { rdest_type_ = RegType::Vector; rdest_ = destReg; }
void setSrcVReg(uint32_t srcReg) { rsrc_type_[num_rsrcs_] = RegType::Vector; rsrc_[num_rsrcs_++] = srcReg; }
void setFunc2(uint32_t func2) { func2_ = func2; }
void setFunc3(uint32_t func3) { func3_ = func3; }
void setFunc7(uint32_t func7) { func7_ = func7; }
void setImm(uint32_t imm) { has_imm_ = true; imm_ = imm; }
void setVlsWidth(uint32_t width) { vlsWidth_ = width; }
void setVmop(uint32_t mop) { vMop_ = mop; }
void setVnf(uint32_t nf) { vNf_ = nf; }
void setVmask(uint32_t mask) { vmask_ = mask; }
void setVs3(uint32_t vs) { vs3_ = vs; }
void setVlmul(uint32_t lmul) { vlmul_ = 1 << lmul; }
void setVsew(uint32_t sew) { vsew_ = 1 << (3+sew); }
void setVediv(uint32_t ediv) { vediv_ = 1 << ediv; }
void setFunc6(uint32_t func6) { func6_ = func6; }
/* Getters used by encoders. */
Opcode getOpcode() const { return opcode_; }
Word getFunc2() const { return func2_; }
Word getFunc3() const { return func3_; }
Word getFunc6() const { return func6_; }
Word getFunc7() const { return func7_; }
int getNRSrc() const { return num_rsrcs_; }
int getRSrc(int i) const { return rsrc_[i]; }
RegType getRSType(int i) const { return rsrc_type_[i]; }
int getRDest() const { return rdest_; }
uint32_t getFunc2() const { return func2_; }
uint32_t getFunc3() const { return func3_; }
uint32_t getFunc6() const { return func6_; }
uint32_t getFunc7() const { return func7_; }
uint32_t getNRSrc() const { return num_rsrcs_; }
uint32_t getRSrc(uint32_t i) const { return rsrc_[i]; }
RegType getRSType(uint32_t i) const { return rsrc_type_[i]; }
uint32_t getRDest() const { return rdest_; }
RegType getRDType() const { return rdest_type_; }
bool hasImm() const { return has_imm_; }
Word getImm() const { return imm_; }
Word getVlsWidth() const { return vlsWidth_; }
Word getVmop() const { return vMop_; }
Word getvNf() const { return vNf_; }
Word getVmask() const { return vmask_; }
Word getVs3() const { return vs3_; }
Word getVlmul() const { return vlmul_; }
Word getVsew() const { return vsew_; }
Word getVediv() const { return vediv_; }
uint32_t getImm() const { return imm_; }
uint32_t getVlsWidth() const { return vlsWidth_; }
uint32_t getVmop() const { return vMop_; }
uint32_t getvNf() const { return vNf_; }
uint32_t getVmask() const { return vmask_; }
uint32_t getVs3() const { return vs3_; }
uint32_t getVlmul() const { return vlmul_; }
uint32_t getVsew() const { return vsew_; }
uint32_t getVediv() const { return vediv_; }
private:
@ -112,27 +113,27 @@ private:
};
Opcode opcode_;
int num_rsrcs_;
uint32_t num_rsrcs_;
bool has_imm_;
RegType rdest_type_;
Word imm_;
uint32_t imm_;
RegType rsrc_type_[MAX_REG_SOURCES];
int rsrc_[MAX_REG_SOURCES];
int rdest_;
Word func2_;
Word func3_;
Word func6_;
uint32_t rsrc_[MAX_REG_SOURCES];
uint32_t rdest_;
uint32_t func2_;
uint32_t func3_;
uint32_t func6_;
uint32_t func7_;
// Vector
Word vmask_;
Word vlsWidth_;
Word vMop_;
Word vNf_;
Word vs3_;
Word vlmul_;
Word vsew_;
Word vediv_;
Word func7_;
uint32_t vmask_;
uint32_t vlsWidth_;
uint32_t vMop_;
uint32_t vNf_;
uint32_t vs3_;
uint32_t vlmul_;
uint32_t vsew_;
uint32_t vediv_;
friend std::ostream &operator<<(std::ostream &, const Instr&);
};

View file

@ -11,13 +11,13 @@
#include "constants.h"
#include <util.h>
#include "args.h"
#include "core.h"
using namespace vortex;
int main(int argc, char **argv) {
int exitcode = 0;
std::string archStr("rv32imf");
std::string imgFileName;
int num_cores(NUM_CORES * NUM_CLUSTERS);
int num_warps(NUM_WARPS);
@ -26,15 +26,14 @@ int main(int argc, char **argv) {
bool showStats(false);
bool riscv_test(false);
/* Read the command line arguments. */
CommandLineArgFlag fh("-h", "--help", "", showHelp);
CommandLineArgSetter<std::string> fa("-a", "--arch", "", archStr);
CommandLineArgSetter<std::string> fi("-i", "--image", "", imgFileName);
CommandLineArgSetter<int> fc("-c", "--cores", "", num_cores);
CommandLineArgSetter<int> fw("-w", "--warps", "", num_warps);
CommandLineArgSetter<int> ft("-t", "--threads", "", num_threads);
CommandLineArgFlag fr("-r", "--riscv", "", riscv_test);
CommandLineArgFlag fs("-s", "--stats", "", showStats);
// parse the command line arguments
CommandLineArgFlag fh("-h", "--help", "show command line options", showHelp);
CommandLineArgSetter<std::string> fi("-i", "--image", "program binary", imgFileName);
CommandLineArgSetter<int> fc("-c", "--cores", "number of cores", num_cores);
CommandLineArgSetter<int> fw("-w", "--warps", "number of warps", num_warps);
CommandLineArgSetter<int> ft("-t", "--threads", "number of threads", num_threads);
CommandLineArgFlag fr("-r", "--riscv", "enable riscv tests", riscv_test);
CommandLineArgFlag fs("-s", "--stats", "show stats", showStats);
CommandLineArg::readArgs(argc - 1, argv + 1);
@ -44,7 +43,6 @@ int main(int argc, char **argv) {
" -c, --cores <num> Number of cores\n"
" -w, --warps <num> Number of warps\n"
" -t, --threads <num> Number of threads\n"
" -a, --arch <arch string> Architecture string\n"
" -r, --riscv riscv test\n"
" -s, --stats Print stats on exit.\n";
return 0;
@ -54,7 +52,7 @@ int main(int argc, char **argv) {
{
// create processor configuation
ArchDef arch(archStr, num_cores, num_warps, num_threads);
ArchDef arch(num_cores, num_warps, num_threads);
// create memory module
RAM ram(RAM_PAGE_SIZE);
@ -79,7 +77,8 @@ int main(int argc, char **argv) {
processor.attach_ram(&ram);
// run simulation
processor.run();
exitcode = processor.run();
}
if (riscv_test) {

View file

@ -15,8 +15,8 @@ struct pipeline_trace_t {
uint64_t uuid;
//--
int cid;
int wid;
uint32_t cid;
uint32_t wid;
ThreadMask tmask;
Word PC;
@ -26,7 +26,7 @@ struct pipeline_trace_t {
//--
bool wb;
RegType rdest_type;
int rdest;
uint32_t rdest;
//--
RegMask used_iregs;

View file

@ -28,7 +28,7 @@ public:
}
void clear() {
for (int i = 0, n = in_use_iregs_.size(); i < n; ++i) {
for (uint32_t i = 0, n = in_use_iregs_.size(); i < n; ++i) {
in_use_iregs_.at(i).reset();
in_use_fregs_.at(i).reset();
in_use_vregs_.at(i).reset();

View file

@ -61,10 +61,11 @@ uint32_t TexUnit::read(int32_t u,
uint32_t addr11 = base_addr + offset11 * stride;
// memory lookup
uint32_t texel00 = core_->dcache_read(addr00, stride);
uint32_t texel01 = core_->dcache_read(addr01, stride);
uint32_t texel10 = core_->dcache_read(addr10, stride);
uint32_t texel11 = core_->dcache_read(addr11, stride);
uint32_t texel00(0), texel01(0), texel10(0), texel11(0);
core_->dcache_read(&texel00, addr00, stride);
core_->dcache_read(&texel01, addr01, stride);
core_->dcache_read(&texel10, addr10, stride);
core_->dcache_read(&texel11, addr11, stride);
mem_addrs->push_back({addr00, stride});
mem_addrs->push_back({addr01, stride});
@ -84,7 +85,8 @@ uint32_t TexUnit::read(int32_t u,
uint32_t addr = base_addr + offset * stride;
// memory lookup
uint32_t texel = core_->dcache_read(addr, stride);
uint32_t texel(0);
core_->dcache_read(&texel, addr, stride);
mem_addrs->push_back({addr, stride});
// filtering

View file

@ -10,12 +10,22 @@
namespace vortex {
typedef uint8_t Byte;
typedef uint8_t Byte;
#if XLEN == 32
typedef uint32_t Word;
typedef int32_t WordI;
typedef uint64_t DWord;
typedef int64_t DWordI;
#elif XLEN == 64
typedef uint64_t Word;
typedef int64_t WordI;
typedef __uint128_t DWord;
typedef __int128_t DWordI;
#else
#error unsupported XLEN
#endif
typedef uint32_t Addr;
typedef uint32_t Size;
typedef uint64_t FWord;
typedef std::bitset<32> RegMask;
typedef std::bitset<32> ThreadMask;
@ -30,12 +40,12 @@ enum class RegType {
Vector
};
inline std::ostream &operator<<(std::ostream &os, const RegType& type) {
switch (type) {
inline std::ostream &operator<<(std::ostream &os, const RegType& clss) {
switch (clss) {
case RegType::None: break;
case RegType::Integer: os << "r"; break;
case RegType::Float: os << "fr"; break;
case RegType::Vector: os << "vr"; break;
case RegType::Integer: os << "x"; break;
case RegType::Float: os << "f"; break;
case RegType::Vector: os << "v"; break;
}
return os;
}
@ -232,7 +242,7 @@ struct MemReq {
inline std::ostream &operator<<(std::ostream &os, const MemReq& req) {
os << "mem-" << (req.write ? "wr" : "rd") << ": ";
os << "addr=" << req.addr << ", tag=" << req.tag << ", core_id=" << req.core_id;
os << "addr=" << std::hex << req.addr << std::dec << ", tag=" << req.tag << ", core_id=" << req.core_id;
os << " (#" << std::dec << req.uuid << ")";
return os;
}

View file

@ -10,11 +10,11 @@
using namespace vortex;
Warp::Warp(Core *core, Word id)
Warp::Warp(Core *core, uint32_t id)
: id_(id)
, core_(core)
, ireg_file_(core->arch().num_threads(), std::vector<Word>(core->arch().num_regs()))
, freg_file_(core->arch().num_threads(), std::vector<Word>(core->arch().num_regs()))
, freg_file_(core->arch().num_threads(), std::vector<FWord>(core->arch().num_regs()))
, vreg_file_(core->arch().num_threads(), std::vector<Byte>(core->arch().vsize()))
{
this->clear();
@ -24,7 +24,7 @@ void Warp::clear() {
active_ = false;
PC_ = STARTUP_ADDR;
tmask_.reset();
for (int i = 0, n = core_->arch().num_threads(); i < n; ++i) {
for (uint32_t i = 0, n = core_->arch().num_threads(); i < n; ++i) {
for (auto& reg : ireg_file_.at(i)) {
reg = 0;
}
@ -41,13 +41,14 @@ void Warp::eval(pipeline_trace_t *trace) {
assert(tmask_.any());
DPH(2, "Fetch: coreid=" << core_->id() << ", wid=" << id_ << ", tmask=");
for (int i = 0, n = core_->arch().num_threads(); i < n; ++i)
for (uint32_t i = 0, n = core_->arch().num_threads(); i < n; ++i)
DPN(2, tmask_.test(n-i-1));
DPN(2, ", PC=0x" << std::hex << PC_ << " (#" << std::dec << trace->uuid << ")" << std::endl);
/* Fetch and decode. */
Word instr_code = core_->icache_read(PC_, sizeof(Word));
uint32_t instr_code = 0;
core_->icache_read(&instr_code, PC_, sizeof(uint32_t));
auto instr = core_->decoder().decode(instr_code);
if (!instr) {
std::cout << std::hex << "Error: invalid instruction 0x" << instr_code << ", at PC=" << PC_ << std::endl;
@ -68,10 +69,16 @@ void Warp::eval(pipeline_trace_t *trace) {
this->execute(*instr, trace);
DP(4, "Register state:");
for (int i = 0; i < core_->arch().num_regs(); ++i) {
for (uint32_t i = 0; i < core_->arch().num_regs(); ++i) {
DPN(4, " %r" << std::setfill('0') << std::setw(2) << std::dec << i << ':');
for (int j = 0; j < core_->arch().num_threads(); ++j) {
DPN(4, ' ' << std::setfill('0') << std::setw(8) << std::hex << ireg_file_.at(j).at(i) << std::setfill(' ') << ' ');
// Integer register file
for (uint32_t j = 0; j < core_->arch().num_threads(); ++j) {
DPN(4, ' ' << std::setfill('0') << std::setw(XLEN/4) << std::hex << ireg_file_.at(j).at(i) << std::setfill(' ') << ' ');
}
DPN(4, '|');
// Floating point register file
for (uint32_t j = 0; j < core_->arch().num_threads(); ++j) {
DPN(4, ' ' << std::setfill('0') << std::setw(16) << std::hex << freg_file_.at(j).at(i) << std::setfill(' ') << ' ');
}
DPN(4, std::endl);
}

View file

@ -32,15 +32,15 @@ struct DomStackEntry {
};
struct vtype {
int vill;
int vediv;
int vsew;
int vlmul;
uint32_t vill;
uint32_t vediv;
uint32_t vsew;
uint32_t vlmul;
};
class Warp {
public:
Warp(Core *core, Word id);
Warp(Core *core, uint32_t id);
void clear();
@ -62,15 +62,15 @@ public:
return 0;
}
Word id() const {
uint32_t id() const {
return id_;
}
Word getPC() const {
uint32_t getPC() const {
return PC_;
}
void setPC(Word PC) {
void setPC(uint32_t PC) {
PC_ = PC;
}
@ -79,13 +79,13 @@ public:
active_ = tmask_.any();
}
Word getTmask() const {
uint32_t getTmask() const {
if (active_)
return tmask_.to_ulong();
return 0;
}
Word getIRegValue(int reg) const {
uint32_t getIRegValue(uint32_t reg) const {
return ireg_file_.at(0).at(reg);
}
@ -95,7 +95,7 @@ private:
void execute(const Instr &instr, pipeline_trace_t *trace);
Word id_;
uint32_t id_;
Core *core_;
bool active_;
@ -103,12 +103,12 @@ private:
ThreadMask tmask_;
std::vector<std::vector<Word>> ireg_file_;
std::vector<std::vector<Word>> freg_file_;
std::vector<std::vector<FWord>> freg_file_;
std::vector<std::vector<Byte>> vreg_file_;
std::stack<DomStackEntry> dom_stack_;
struct vtype vtype_;
int vl_;
uint32_t vl_;
};
}

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E --core $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 -Wstack-usage=1024 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -50,7 +52,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ OPTS ?= -n1024
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ OPTS ?= -n16
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -52,7 +54,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= $(wildcard ../../../../riscv-gnu-toolchain/drops)
POCL_CC_PATH ?= $(wildcard ../../../../pocl/drops_riscv_cc)
POCL_INC_PATH ?= $(wildcard ../include)
@ -19,7 +21,7 @@ VX_SRCS += $(VORTEX_RT_PATH)/fileio/fileio.S
VX_SRCS += $(VORTEX_RT_PATH)/tests/tests.c
VX_SRCS += $(VORTEX_RT_PATH)/vx_api/vx_api.c
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link.ld
VX_CFLAGS = -nostartfiles -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/startup/vx_link$(XLEN).ld
CXXFLAGS = -g -O0 -march=rv32im -mabi=ilp32
CXXFLAGS += -ffreestanding # program may not begin at main()
@ -53,7 +55,7 @@ $(PROJECT).dump: $(PROJECT).elf
$(DMP) -D $(PROJECT).elf > $(PROJECT).dump
run: $(PROJECT).hex
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E -a rv32i --core $(PROJECT).hex -s -b 1> emulator.debug
POCL_DEBUG=all $(VX_SIMX_PATH)/Vcache_simX -E $(PROJECT).hex -s -b 1> emulator.debug
qemu: $(PROJECT).qemu
POCL_DEBUG=all $(RISCV_TOOLCHAIN_PATH)/bin/qemu-riscv32 -d in_asm -D debug.log $(PROJECT).qemu

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -9,7 +11,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
LLVM_PREFIX ?= /opt/llvm-riscv
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf
@ -11,7 +13,7 @@ VORTEX_RT_PATH ?= $(realpath ../../../runtime)
K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex -float-abi=hard -code-model=small"
K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -Xclang -target-feature -Xclang +vortex -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
K_LDFLAGS += "-Wl,-Bstatic,-T$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a -lm"
CXXFLAGS += -std=c++11 -Wall -Wextra -Wfatal-errors

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -lm

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -DSM_ENABLE=0 -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections,--defsym=__stack_top=0xfefff000
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections,--defsym=__stack_top=0xfefff000
VX_RUNTIME = $(VORTEX_RT_PATH)/src/vx_start.S $(VORTEX_RT_PATH)/src/vx_perf.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,4 +1,6 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(realpath ../../../runtime)
@ -18,7 +20,7 @@ VX_CFLAGS += -Xclang -target-feature -Xclang +vortex
VX_CFLAGS += --sysroot=${SYSROOT} --gcc-toolchain=${RISCV_TOOLCHAIN_PATH}
VX_CFLAGS += -I${VORTEX_HW_PATH} -I${VORTEX_RT_PATH}/include
VX_LDFLAGS += -Wl,-Bstatic,-T${VORTEX_RT_PATH}/linker/vx_link.ld,--gc-sections ${VORTEX_RT_PATH}/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T${VORTEX_RT_PATH}/linker/vx_link$(XLEN).ld,--gc-sections ${VORTEX_RT_PATH}/libvortexrt.a
VX_DPFLAGS = -arch=riscv32 -mcpu=generic-rv32 -mattr=+m,+f -mattr=+vortex

View file

@ -1,3 +1,5 @@
XLEN ?= 32
RISCV_TOOLCHAIN_PATH ?= /opt/riscv-gnu-toolchain
VORTEX_DRV_PATH ?= $(realpath ../../../driver)
VORTEX_RT_PATH ?= $(wildcard ../../../runtime)
@ -12,7 +14,7 @@ VX_CP = $(RISCV_TOOLCHAIN_PATH)/bin/riscv32-unknown-elf-objcopy
VX_CFLAGS += -std=c++11 -march=rv32imf -mabi=ilp32f -O3 -Wstack-usage=1024 -ffreestanding -nostartfiles -fdata-sections -ffunction-sections
VX_CFLAGS += -DENABLE_SW -I$(VORTEX_RT_PATH)/include -I$(VORTEX_RT_PATH)/../hw -I$(VORTEX_RT_PATH)/../sim/common -I$(VORTEX_RT_PATH)/../third_party
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link.ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_LDFLAGS += -Wl,-Bstatic,-T,$(VORTEX_RT_PATH)/linker/vx_link$(XLEN).ld -Wl,--gc-sections $(VORTEX_RT_PATH)/libvortexrt.a
VX_SRCS = kernel.c

View file

@ -1,18 +1,50 @@
ALL_TESTS := $(wildcard *.hex)
XLEN ?= 32
D_TESTS := $(wildcard *ud-p-*.hex)
V_TESTS := $(wildcard *-v-*.hex)
SIM_DIR=../../../sim
EXCLUDED_TESTS := $(V_TESTS) $(D_TESTS) rv32si-p-scall.hex rv32si-p-sbreak.hex rv32mi-p-breakpoint.hex rv32ua-p-amomax_w.hex rv32ua-p-amoxor_w.hex rv32ua-p-amoor_w.hex rv32mi-p-ma_addr.hex rv32mi-p-mcsr.hex rv32ua-p-amoswap_w.hex rv32mi-p-ma_fetch.hex rv32mi-p-csr.hex rv32ua-p-amoadd_w.hex rv32si-p-dirty.hex rv32ui-p-fence_i.hex rv32si-p-csr.hex rv32mi-p-shamt.hex rv32ua-p-amomin_w.hex rv32ua-p-lrsc.hex rv32si-p-wfi.hex rv32ua-p-amomaxu_w.hex rv32si-p-ma_fetch.hex rv32mi-p-illegal.hex rv32uc-p-rvc.hex rv32mi-p-sbreak.hex rv32ua-p-amominu_w.hex rv32ua-p-amoand_w.hex
TESTS_32I := $(filter-out rv32ui-p-fence_i.hex, $(wildcard rv32ui-p-*.hex))
TESTS_32M := $(wildcard rv32um-p-*.hex)
TESTS_32F := $(wildcard rv32uf-p-*.hex)
TESTS_32D := $(wildcard rv32ud-p-*.hex)
TESTS := $(filter-out $(EXCLUDED_TESTS), $(ALL_TESTS))
TESTS_64I := $(wildcard rv64ui-p-*.hex)
TESTS_64M := $(wildcard rv64um-p-*.hex)
TESTS_64F := $(wildcard rv64uf-p-*.hex)
TESTS_64D := $(wildcard rv64ud-p-*.hex)
all:
run-simx:
$(foreach test, $(TESTS), ../../../sim/simx/simx -r -a rv32i -c 1 -i $(test) || exit;)
run-simx-32i:
$(foreach test, $(TESTS_32I), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32im:
$(foreach test, $(TESTS_32I) $(TESTS_32M), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32imf:
$(foreach test, $(TESTS_32I) $(TESTS_32M) $(TESTS_32F), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32imfd:
$(foreach test, $(TESTS_32I) $(TESTS_32M) $(TESTS_32F) $(TESTS_32D), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64i:
$(foreach test, $(TESTS_64I), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64im:
$(foreach test, $(TESTS_64I) $(TESTS_64M), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64imf:
$(foreach test, $(TESTS_64I) $(TESTS_64M) $(TESTS_64F), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-64imfd:
$(foreach test, $(TESTS_64I) $(TESTS_64M) $(TESTS_64F) $(TESTS_64D), $(SIM_DIR)/simx/simx -r -c 1 -i $(test) || exit;)
run-simx-32: run-simx-32imfd
run-simx-64: run-simx-32imfd run-simx-64imfd
run-simx: run-simx-$(XLEN)
run-rtlsim:
$(foreach test, $(TESTS), ../../../sim/rtlsim/rtlsim -r $(test) || exit;)
$(foreach test, $(TESTS_32I) $(TESTS_32M) $(TESTS_32F), $(SIM_DIR)/rtlsim/rtlsim -r $(test) || exit;)
clean:

View file

@ -1,49 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130FCF2063040F0067000F00AD
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:10011000930120007310007AF325007A631EB00E5D
:1001200017060000130606027310267A3705002012
:10013000130545047310157AF325107A6318B5007A
:10014000630E000A9301300003250600930140006E
:1001500037050020130515047310157AF325107A5E
:100160006310B502172600001306C6E97310267A3D
:1001700003260600630406089301500023200600AE
:100180009301600037050020130525047310157ACC
:10019000F325107A6312B5062320C6009301700080
:1001A00003260600631C0604130510007310057A6D
:1001B000F325007A6312B5063705002013051504F0
:1001C0007310157A97260000938606E47390267ABA
:1001D0009301800083A60600638206029301A000BB
:1001E00017260000130606E22320C6009301B00084
:1001F0000326060063140600631030020F00F00FA0
:10020000638001009391110093E111009308D005E0
:1002100013850100730000000F00F00F9301100020
:100220009308D005130500007300000093F211003D
:10023000E39602FC9302300073232034E39062FCC7
:10024000F3221034938242007390123473002030F2
:10025000731000C00000000000000000000000005B
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000000000000000000000000000000000000D0
:040000058000000077
:00000001FF

View file

@ -1,57 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F8F2663040F0067000F00E7
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100073D0013473250034930E30009301200016
:10012000631CD513F3F50034930E300093013000B7
:100130006394D51373660234930E2000930140003C
:10014000631CD611F3560134930E600093015000E6
:100150006394D6113725AD0B1305A5DEF3150534D1
:10016000930E2000930160006398D50F372500009F
:100170001305A5DE73350534B72EAD0B938EAEDEB9
:1001800093017000631AD50D37C500001305F5EE15
:1001900073250534B70EAD0B93018000631ED50B9C
:1001A00073250034B7CEAD0B938EFEEE9301900015
:1001B0006314D50B7325103013750502630805020F
:1001C000B765000073A00530530000F073B0053030
:1001D00097250000938505E327A0050003A50500EA
:1001E000930E10009301A0006318D50773251030FB
:1001F000135545011375150063040504B72200006B
:100200009382028073B00230970200009382020151
:1002100073901234730020301305F00F731500C073
:10022000930EF00F9301B0006318D5031305F00F80
:1002300073250030930EF00F9301C000631ED501AB
:100240000F00F00F930110009308D0051305000074
:1002500073000000631030020F00F00F6380010094
:100260009391110093E111009308D00513850100CB
:10027000730000000F00F00F930110009308D005E9
:1002800013050000730000009302900063E6510024
:100290009302B00063F23202F32220341303800091
:1002A000E39C62FA0F00F00F930110009308D00551
:1002B0001305000073000000F32220341303200014
:1002C000E39C62F8F322103493824200739012345C
:1002D00073002030731000C0000000000000000018
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000001000000000000000000000000000000CF
:040000058000000077
:00000001FF

View file

@ -1,81 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F2E63040F0067000F005F
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100093012000000000006F00400FB722000094
:100120009382028073B00230371300001303038000
:1001300073200330F3230030B3F353006316730EC0
:100140007350413473504130970200009382921BE8
:1001500073945230F322503093F2120063860200FF
:10016000736004306F0000007310543073503130EE
:10017000970200009382820273901234B72200002B
:100180009382028073B002303713000013030380A0
:100190007320033073002030730050100000000003
:1001A0006F00C006730050106F004006730000120D
:1001B000F3220018000000006F00400573000012D9
:1001C0006F00C004F32200186F0040049702000083
:1001D00093820202739012149302001073A0021013
:1001E0009302000273B002107300201000000000A0
:1001F0006F00C001970200009382020173901214F5
:10020000730020106F008000631030020F00F00FA9
:10021000638001009391110093E111009308D005D0
:1002200013850100730000000F00F00F9301100010
:100230009308D005130500007300000013000000B0
:100240001300000013000000130000001300000062
:100250001300000013000000130000001300000052
:100260001300000013000000130000001300000042
:100270001300000013000000130000001300000032
:100280001300000013000000130000001300000022
:100290001300000013000000130000001300000012
:1002A0001300000013000000130000001300000002
:1002B00013000000130000001300000013000000F2
:1002C00013000000130000001300000013000000E2
:1002D00013000000130000001300000013000000D2
:1002E00013000000130000001300000013000000C2
:1002F00013000000130000001300000013000000B2
:100300006F0000046FF05FE66FF05FF06FF01FF0BA
:100310006FF0DFEF6FF09FEF6FF05FEF6FF01FEFA9
:100320006FF0DFEE6FF09FEE6FF05FEE6FF01FEE9D
:100330006FF0DFED6FF09FED6FF05FED6FF01FED91
:1003400013032000F3222034E39262ECF3221034F2
:10035000F3233034638E030003D30200B3C363007E
:1003600003D3220013130301B3C36300E39003EA32
:1003700017030000130343DA638E620417030000BF
:10038000130303E2638E6204170300001303C3E147
:100390006382620417030000130303E263886204AC
:1003A000170300001303C3E1638662021703000012
:1003B000130383E16380620217030000130343E326
:1003C000638C6202170300001303C3E3638C6202B1
:1003D0006FF0DFE393828200739012347300203059
:1003E00037032000732003306FF0DFFE3703100067
:1003F000732003306FF01FFE37034000732003307B
:100400006FF05FFD6FF01FFD731000C00000000073
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:08048000000000000000000074
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,73 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F8F2A63040F0067000F00E3
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100017240000130404EF93044000930120000F
:10012000970300009383C301130314000313140007
:10013000B7C3FFFF9383C3BC631E731493013000E6
:10014000970300009383C3011303140003531400A7
:10015000B7C300009383C3BC631E731293014000B6
:10016000970300009383C3011303140003231400B7
:10017000B7C3AA999383C3BC631E73109301500045
:10018000970300009383C301130324000323240077
:10019000B7B399889383B3AB631E730E930160006A
:1001A000970300009383C301130334000323340037
:1001B000B7A388779383A39A631E730C930460009C
:1001C000930160019703000093830303130314005A
:1001D000A310040003030400630E030A03033400A6
:1001E000630A030A030314006316030A03032400CB
:1001F0006312030A930170019703000093830303C2
:1002000013035400A32204000303440063040308FF
:10021000030394006300030803035400631C0306F4
:100220000303840063180306930180019703000011
:10023000938303031303A400232504000303940002
:10024000630A03040303E400630603040303A40036
:10025000631203040303D400631E0302930190019D
:1002600097030000938303031303F400A327040000
:100270000303E4006300030203033401630C03007F
:100280000303F40063180300030324016314030051
:10029000631030020F00F00F638001009391110092
:1002A00093E111009308D00513850100730000004D
:1002B0000F00F00F930110009308D0051305000004
:1002C0007300000013000000F3222034E39492FC3A
:1002D000F3223034E39062FC83820200E38C02FA62
:1002E0007390133473002030731000C000000000BE
:1002F00000000000000000000000000000000000FE
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000DDCCBBAA998877665544332211EEFFEEEA
:1020100050505050505050505050505050505050C0
:1020200050505050505050505050505050505050B0
:1020300050505050505050505050505050505050A0
:102040005050505050505050505050505050505090
:102050005050505050505050505050505050505080
:102060005050505050505050505050505050505070
:102070005050505050505050505050505050505060
:102080005050505050505050505050505050505050
:102090005050505050505050505050505050505040
:1020A0005050505050505050505050505050505030
:1020B0005050505050505050505050505050505020
:1020C0005050505050505050505050505050505010
:1020D0005050505050505050505050505050505000
:1020E00050505050505050505050505050505050F0
:1020F00050505050505050505050505050505050E0
:10210000505050505050505050505050505050001F
:040000058000000077
:00000001FF

View file

@ -1,52 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F2263040F0067000F006B
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:100110009301200013030000970200009382C200A5
:100120006783220011A019A06F00800E9301300098
:10013000970200009382C200678312006F00800064
:100140006F00000D930140001303000097020000B0
:100150009382C2006783320011A019A06F00400B88
:100160009301500013030000970200009382C20025
:100170006F03600011A019A06F0080099301600057
:1001800013030000970200009382C2006303000083
:1001900011A019A06F00C007930170006315000043
:1001A0006F00C00009A009A06F00800693018000C5
:1001B000F323103093F3430063880304010073704A
:1001C00012300100F323103093F3430063820304E1
:1001D00097020000938242039382E2FF73901234ED
:1001E00073701230F323103093F34300639E0300C7
:1001F000B72300009383038073A003307300203083
:1002000063020000736012306F004002631030021E
:100210000F00F00F638001009391110093E1110032
:100220009308D00513850100730000000F00F00F44
:10023000930110009308D00513050000730000001F
:10024000130520006380A10213054000638CA10008
:10025000130550006388A100130560006384A100AA
:100260006FF01FFBE31603FA93050000732520349B
:10027000E310B5FAF325103493854500E39AB2F8FC
:1002800073253034630605001305E5FFE31255F8C6
:100290009385C5007390153473002030731000C02F
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F4735000303725000008
:1000F00013050580732005309702000093824201AA
:1001000073901234732540F1730020307325103042
:100110001355E501930E1000930120006318D503D9
:10012000732540F1930E0000930130006310D50356
:10013000732530F1732520F1732510F1930200002F
:1001400073A0523073A01234631030020F00F00F0E
:10015000638001009391110093E111009308D00591
:1001600013850100730000000F00F00F93011000D1
:100170009308D0051305000073000000731000C041
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,32 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F1363040F0067000F007A
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100093012000730010006F0080006310300214
:100120000F00F00F638001009391110093E1110023
:100130009308D00513850100730000000F00F00F35
:10014000930110009308D005130500007300000010
:1001500013033000F3222034E39462FC1703000001
:10016000130383FBF3221034E39C62FA6FF01FFD4C
:10017000731000C00000000000000000000000003C
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F0F1763040F0067000F0076
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:100110009301200013038000B72200009382028025
:1001200073B00230F3230030B3F272006384020034
:100130001303B000B72200009382028073B0023034
:1001400097020000938202017390123473002030F2
:1001500093011000730000006F00800063103002F4
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000F3222034E39662FC970300009383C3FBB1
:1001A000F3221034E39E72FA6FF05FFD731000C00B
:1001B000000000000000000000000000000000003F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130F8F1463040F0067000F00F9
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:100110001305100013150501B70E0100930120000F
:10012000631CD50113150502930E100093013000D6
:100130006314D001631030020F00F00F63800100E0
:100140009391110093E111009308D00513850100EC
:10015000730000000F00F00F930110009308D0050A
:10016000130500007300000093022000E39651FC89
:10017000F322203413032000E39062FC6FF09FFD14
:10018000731000C00000000000000000000000002C
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,49 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000097020000938242169F
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F17300203073D00114732500144F
:10012000930E300093012000631AD50DF3F50014EF
:10013000930E3000930130006392D50D7366021464
:10014000930E200093014000631AD60BF35601145E
:10015000930E6000930150006392D60B3725AD0BD0
:100160001305A5DEF3150514930E2000930160001E
:100170006396D509372500001305A5DE73350514F0
:10018000B72EAD0B938EAEDE930170006318D507CA
:1001900037C500001305F5EE73250514B70EAD0B3A
:1001A00093018000631CD50573250014B7CEAD0BF9
:1001B000938EFEEE930190006312D505930200101A
:1001C00073B0021097020000938202017390121420
:1001D0007300201013000000930E00009301C00074
:1001E000631ED0010F00F00F930110009308D0059B
:1001F0001305000073000000631030020F00F00FC1
:10020000638001009391110093E111009308D005E0
:1002100013850100730000000F00F00F9301100020
:100220009308D005130500007300000093029000AE
:1002300063E651009302B00063F23202F32220140D
:1002400013038000E39C62FA0F00F00F930110008B
:100250009308D0051305000073000000F32220145A
:1002600013032000E39C62F8F322101493824200EF
:100270007390121473002010731000C0000000006F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000001000000000000000000000000000000CF
:040000058000000077
:00000001FF

View file

@ -1,53 +0,0 @@
:0200000480007A
:100000006F00C004732F2034930F8000630AFF0336
:10001000930F90006306FF03930FB0006302FF038A
:10002000170F0000130FCF1E63040F0067000F00AF
:10003000732F203463540F006F00400093E19153FD
:10004000171F000023203FFC6FF09FFF732540F136
:1000500063100500970200009382020173905230F2
:10006000735000189702000093820202739052307E
:10007000B70200809382F2FF7390023B9302F0017B
:100080007390023A9702000093828201739052307B
:100090007350203073503030735040309301000063
:1000A00097020000938242F67390523013051000BD
:1000B0001315F501634C05000F00F00F93011000BC
:1000C0009308D005130500007300000093020000A0
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39A62F4735000300F
:1000F00037250000130505807320053097020000A6
:100100009382420173901234732540F173002030C2
:1001100037050080972500009385C5EE93D5C5006F
:10012000B3E5A5007390051873000012B71502001F
:100130009385058073A00530930120009303100080
:1001400017250080232475EC93013000B7150400B7
:100150009385058073A005309722008083A202EB6F
:10016000639C021017250080232275EA97220080E5
:1001700083A2C2E963927210B702020073B0023028
:100180009722000083A202E81305000CB3F2A2003C
:100190006394A20EB702020073A0023093014000E4
:1001A00017250080032505E613650540972200808A
:1001B00023AAA2E4730000129722008023A4A2E4E1
:1001C0006F00800B0F00F00F930110009308D00513
:1001D0001305000073000000631030020F00F00FE1
:1001E000638001009391110093E111009308D00501
:1001F00013850100730000000F00F00F9301100041
:100200009308D0051305000073000000F32220348A
:10021000938212FF6392020613032000639261022D
:100220009722000083A202DE13F302086316030480
:10023000F322103493824200739012347300203002
:1002400013033000639461029722000083A282DBD3
:1002500013F302086312030293E20208172300005B
:10026000232253DA7300001273002030130340007E
:10027000639461006FF05FF80F00F00F638001007E
:100280009391110093E111009308D00513850100AB
:1002900073000000731000C00000000000000000A8
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:102000005F00002000000000000000000000000051
:040000058000000077
:00000001FF

View file

@ -1,48 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C00013050000730000009702000093824212A3
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F173002030930120001303000089
:10012000970200009382C2006783220011A019A0E9
:100130006F00C00893013000970200009382C20054
:10014000678312006F0080006F004007930140003A
:1001500013030000970200009382C20067833200FD
:1001600011A019A06F008005930150001303000037
:10017000970200009382C2006F03600011A019A0D3
:100180006F00C0039301600013030000970200009A
:100190009382C2006303000011A019A06F00000247
:1001A00093017000631500006F00C00009A009A052
:1001B0006F00C0006F004002631030020F00F00FAC
:1001C000638001009391110093E111009308D00521
:1001D00013850100730000000F00F00F9301100061
:1001E0009308D005130500007300000013052000DC
:1001F0006380A10213054000638CA1001305500029
:100200006388A100130560006384A1006FF01FFBE9
:10021000E31603FA9305000073252014E310B5FAE2
:10022000F325101493854500E39AB2F87325301432
:10023000630605001305E5FFE31255F89385C50035
:100240007390151473002010731000C0000000009C
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,32 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C00013050000730000009702000093820209EC
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F17300203093012000730010001C
:100120006F008000631030020F00F00F6380010049
:100130009391110093E111009308D00513850100FC
:10014000730000000F00F00F930110009308D0051A
:10015000130500007300000013033000F322201485
:10016000E39462FC17030000130383FBF3221014D3
:10017000E39C62FA6FF01FFD731000C000000000E6
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C0001305000073000000970200009382020BEA
:1000D000638E020073905210B7B2000093829210A8
:1000E0007390223073232030E39862F47350003011
:1000F0003715000013050580732005301305200215
:1001000073203530970200009382420173901234BD
:10011000732540F173002030930120001303800009
:100120009302001073B00210970200009382020144
:1001300073901214730020109301100073000000DC
:100140006F008000631030020F00F00F6380010029
:100150009391110093E111009308D00513850100DC
:10016000730000000F00F00F930110009308D005FA
:100170001305000073000000F3222014E39662FCD4
:10018000970300009383C3FBF3221014E39E72FADB
:100190006FF05FFD731000C0000000000000000061
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,32 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F4735000303715000018
:1000F0001305058073200530130520027320353069
:10010000970200009382420173901234732540F1EC
:1001100073002030737001107360411073604114DC
:10012000730050100F00F00F930110009308D005DA
:100130001305000073000000631030020F00F00F81
:10014000638001009391110093E111009308D005A1
:1001500013850100730000000F00F00F93011000E1
:100160009308D0051305000073000000731000C051
:0C01700000000000000000000000000083
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B600B70E008093012000F1
:100120006312D70583A70600B70E0080938E0E805A
:10013000930130006398D703B70500802FA7B6005E
:10014000B70E0080938E0E8093014000631CD70190
:1001500083A70600930E0080930150006394D7019B
:10016000631030020F00F00F6380010093911100C3
:1001700093E111009308D00513850100730000007E
:100180000F00F00F930110009308D0051305000035
:1001900073000000731000C00000000000000000A9
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B660B70E00809301200091
:10012000631ED70383A70600B70E0080930130003B
:100130006396D703B70500802FA7B660B70E00807F
:1001400093014000631CD70183A70600B70E00800F
:10015000930150006394D701631030020F00F00F39
:10016000638001009391110093E111009308D00581
:1001700013850100730000000F00F00F93011000C1
:100180009308D0051305000073000000731000C031
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B6A0B70E00809301200051
:100120006310D70583A70600930E0080930130006B
:100130006398D7039305100023A006002FA7B6A04D
:10014000930E000093014000631CD70183A70600B3
:10015000930E1000930150006394D7016310300296
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B6E0B70E00809301200011
:100120006310D70583A70600930E0080930130006B
:100130006398D7039305F0FF23A006002FA7B6E02E
:10014000930E000093014000631CD70183A70600B3
:10015000930EF0FF930150006394D70163103002B7
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B680B70E00809301200071
:100120006310D70583A70600B70E00809301300047
:100130006398D7039305F0FF23A006002FA7B6808E
:10014000930E000093014000631CD70183A70600B3
:10015000930EF0FF930150006394D70163103002B7
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B6C0B70E00809301200031
:100120006310D70583A70600B70E00809301300047
:100130006398D7039305F0FF23A006002FA7B6C04E
:10014000930E000093014000631CD70183A70600B3
:10015000930E0000930150006394D70163103002A6
:100160000F00F00F638001009391110093E11100E3
:100170009308D00513850100730000000F00F00FF5
:10018000930110009308D0051305000073000000D0
:10019000731000C00000000000000000000000001C
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B640B70E008093012000B1
:10012000631ED70383A70600930E0080930130005F
:100130006396D703930510002FA7B640930E008057
:1001400093014000631CD70183A70600930E108023
:10015000930150006394D701631030020F00F00F39
:10016000638001009391110093E111009308D00581
:1001700013850100730000000F00F00F93011000C1
:100180009308D0051305000073000000731000C031
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B608B70E008093012000E9
:10012000631ED70383A70600930E0080930130005F
:100130006396D703B70500802FA7B608930E0080FB
:1001400093014000631CD70183A70600B70E00800F
:10015000930150006394D701631030020F00F00F39
:10016000638001009391110093E111009308D00581
:1001700013850100730000000F00F00F93011000C1
:100180009308D0051305000073000000731000C031
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,36 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:10010000370500809305008097260000938686EFD0
:1001100023A0A6002FA7B620B70E008093012000D1
:100120006316D70583A70600B70E0080938E0E8056
:1001300093013000639CD703B70500C09385150079
:100140002FA7B620B70E0080938E0E80930140003B
:10015000631ED70183A70600B70E00C0938E1E80D2
:10016000930150006394D701631030020F00F00F29
:10017000638001009391110093E111009308D00571
:1001800013850100730000000F00F00F93011000B1
:100190009308D0051305000073000000731000C021
:1001A000000000000000000000000000000000004F
:0C01B00000000000000000000000000043
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:040000058000000077
:00000001FF

View file

@ -1,109 +0,0 @@
:0200000480007A
:100000006F008004732F2034930F80006308FF0378
:10001000930F90006304FF03930FB0006300FF038E
:10002000130F000063040F0067000F00732F2034CC
:1000300063540F006F00400093E19153171F0000BD
:1000400023223FFC6FF09FFF732540F163100500F2
:10005000970200009382020173905230735000188F
:10006000970200009382020273905230B702008020
:100070009382F2FF7390023B9302F0017390023A75
:1000800097020000938282017390523073502030A7
:1000900073503030735040309301000097020000DD
:1000A000938282F673905230130510001315F501F8
:1000B000634C05000F00F00F930110009308D0056A
:1000C000130500007300000093020000638E02001D
:1000D00073905210B7B20000938292107390223046
:1000E00073232030E39A62F47350003097020000CB
:1000F0009382420173901234732540F173002030D3
:1001000017250000130505F0930510002F26B500F4
:1001100093061000E37ED6FE83250500E3EED5FEB0
:1001200017250000130585EEB7C7ADDE9387F7EE00
:100130002F27F518930E1000930120006316D70D9A
:1001400017270000032787EC930E0000930130006F
:10015000631CD70B17250000130545EB97250000FE
:100160009385052BAFA505102F27B518930E10000A
:1001700093014000631AD70917250000130505E90C
:1001800093050040130616002F2705103307C700FC
:100190002F27E518E31A07FE9385F5FFE39605FE82
:1001A00017250000130545E6930510002F20B50024
:1001B00083250500E3CED5FE0F00F00F17250000C4
:1001C0000325C5E4939596003305B5409386F6FF65
:1001D000E3DC06FE930E0000930150006316D50386
:1001E00017250000130585E2AF250510AF2505187A
:1001F000E39C05FEAF250518930E100093016000E7
:100200006394D501631030020F00F00F638001008A
:100210009391110093E111009308D005138501001B
:10022000730000000F00F00F930110009308D00539
:0C0230001305000073000000731000C0F4
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:1020000000000000000000000000000000000000D0
:1020100000000000000000000000000000000000C0
:1020200000000000000000000000000000000000B0
:1020300000000000000000000000000000000000A0
:102040000000000000000000000000000000000090
:102050000000000000000000000000000000000080
:102060000000000000000000000000000000000070
:102070000000000000000000000000000000000060
:102080000000000000000000000000000000000050
:102090000000000000000000000000000000000040
:1020A0000000000000000000000000000000000030
:1020B0000000000000000000000000000000000020
:1020C0000000000000000000000000000000000010
:1020D0000000000000000000000000000000000000
:1020E00000000000000000000000000000000000F0
:1020F00000000000000000000000000000000000E0
:1021000000000000000000000000000000000000CF
:1021100000000000000000000000000000000000BF
:1021200000000000000000000000000000000000AF
:10213000000000000000000000000000000000009F
:10214000000000000000000000000000000000008F
:10215000000000000000000000000000000000007F
:10216000000000000000000000000000000000006F
:10217000000000000000000000000000000000005F
:10218000000000000000000000000000000000004F
:10219000000000000000000000000000000000003F
:1021A000000000000000000000000000000000002F
:1021B000000000000000000000000000000000001F
:1021C000000000000000000000000000000000000F
:1021D00000000000000000000000000000000000FF
:1021E00000000000000000000000000000000000EF
:1021F00000000000000000000000000000000000DF
:1022000000000000000000000000000000000000CE
:1022100000000000000000000000000000000000BE
:1022200000000000000000000000000000000000AE
:10223000000000000000000000000000000000009E
:10224000000000000000000000000000000000008E
:10225000000000000000000000000000000000007E
:10226000000000000000000000000000000000006E
:10227000000000000000000000000000000000005E
:10228000000000000000000000000000000000004E
:10229000000000000000000000000000000000003E
:1022A000000000000000000000000000000000002E
:1022B000000000000000000000000000000000001E
:1022C000000000000000000000000000000000000E
:1022D00000000000000000000000000000000000FE
:1022E00000000000000000000000000000000000EE
:1022F00000000000000000000000000000000000DE
:1023000000000000000000000000000000000000CD
:1023100000000000000000000000000000000000BD
:1023200000000000000000000000000000000000AD
:10233000000000000000000000000000000000009D
:10234000000000000000000000000000000000008D
:10235000000000000000000000000000000000007D
:10236000000000000000000000000000000000006D
:10237000000000000000000000000000000000005D
:10238000000000000000000000000000000000004D
:10239000000000000000000000000000000000003D
:1023A000000000000000000000000000000000002D
:1023B000000000000000000000000000000000001D
:1023C000000000000000000000000000000000000D
:1023D00000000000000000000000000000000000FD
:1023E00000000000000000000000000000000000ED
:1023F00000000000000000000000000000000000DD
:1024000000000000000000000000000000000000CC
:040000058000000077
:00000001FF

View file

@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385C58297F6FFFF6A
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385857F97F6FFFF9386C6AD17F6FFFF6D
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385457DB3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385057897F6FFFFF3
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385057197F6FFFF9386C68C17F6FFFF0A
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938585671306100497F6FFFFD1
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306465897E6FFFFED
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306464997E6FFFF9386866A2E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306064097E6FFFF938686641D
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093076001930500001303F303D8
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7B74A07DF
:102B8000B7050800938767AA130700009385C5FF60
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306462B97E6FFFF93868641E3
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B600B70E00809301200076
:102C70006312D70583A70600B70E0080938E0E80DF
:102C8000930130006398D703B70500802FA7B600E3
:102C9000B70E0080938E0E8093014000631CD70115
:102CA00083A70600930E0080930150006394D70120
:102CB000631A3000139511006300050013651500B9
:102CC000730000001305100073000000731000C0B3
:102CD000417373657274696F6E206661696C6564B7
:102CE0003A2061646472203E3D202831554C203CDE
:102CF0003C203132292026262061646472203C2049
:102D00003633202A202831554C203C3C20313229B2
:102D10000A000000417373657274696F6E2066610A
:102D2000696C65643A20212870745B315D5B616475
:102D300064722F2831554C203C3C203132295D20D3
:102D4000262030783038302920262620636175739C
:102D500065203D3D203078660A00000041737365B0
:102D60007274696F6E206661696C65643A206E6F7B
:102D700064650A00417373657274696F6E206661E1
:102D8000696C65643A20757365725F6D6170706916
:102D90006E675B616464722F2831554C203C3C2087
:102DA0003132295D2E61646472203D3D20300A007D
:102DB000417373657274696F6E206661696C6564D6
:102DC0003A2070745B315D5B616464722F28315509
:102DD0004C203C3C203132295D2026203078303494
:102DE000300A0000417373657274696F6E2066610A
:102DF000696C65643A2070745B315D5B6164647218
:102E00002F2831554C203C3C203132295D20262092
:102E100030783038300A0000417373657274696F1E
:102E20006E206661696C65643A2074662D3E65703B
:102E30006320252034203D3D20300A004173736516
:102E40007274696F6E206661696C65643A20212234
:102E5000696C6C6567616C20696E737472756374FC
:102E6000696F6E220A000000417373657274696FA6
:102E70006E206661696C65643A202122756E657802
:102E800070656374656420657863657074696F6EDE
:102E9000220A0000417373657274696F6E20666167
:102EA000696C65643A202122756E737570706F725B
:102EB0007465642073617470206D6F6465220A000C
:040000058000000077
:00000001FF

View file

@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385458297F6FFFFEA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385057F97F6FFFF9386C6AD17F6FFFFED
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385C57C34
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385857797F6FFFF74
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385857097F6FFFF9386C68C17F6FFFF8B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938505671306100497F6FFFF51
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306C65797E6FFFF6E
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306C64897E6FFFF9386866AAF
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306863F97E6FFFF938686649E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093072002930500001303F30317
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7C7540AC2
:102B8000B70508009387A72E130700009385C5FF9C
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306C62A97E6FFFF9386864164
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B660B70E00809301200016
:102C7000631ED70383A70600B70E008093013000C0
:102C80006396D703B70500802FA7B660B70E008004
:102C900093014000631CD70183A70600B70E008094
:102CA000930150006394D701631A3000139511000B
:102CB0006300050013651500730000001305100084
:082CC00073000000731000C056
:102CC800417373657274696F6E206661696C6564BF
:102CD8003A2061646472203E3D202831554C203CE6
:102CE8003C203132292026262061646472203C2051
:102CF8003633202A202831554C203C3C20313229BB
:102D08000A000000417373657274696F6E20666112
:102D1800696C65643A20212870745B315D5B61647D
:102D280064722F2831554C203C3C203132295D20DB
:102D380026203078303830292026262063617573A4
:102D480065203D3D203078660A00000041737365B8
:102D58007274696F6E206661696C65643A206E6F83
:102D680064650A00417373657274696F6E206661E9
:102D7800696C65643A20757365725F6D617070691E
:102D88006E675B616464722F2831554C203C3C208F
:102D98003132295D2E61646472203D3D20300A0085
:102DA800417373657274696F6E206661696C6564DE
:102DB8003A2070745B315D5B616464722F28315511
:102DC8004C203C3C203132295D202620307830349C
:102DD800300A0000417373657274696F6E20666112
:102DE800696C65643A2070745B315D5B6164647220
:102DF8002F2831554C203C3C203132295D2026209B
:102E080030783038300A0000417373657274696F26
:102E18006E206661696C65643A2074662D3E657043
:102E28006320252034203D3D20300A00417373651E
:102E38007274696F6E206661696C65643A2021223C
:102E4800696C6C6567616C20696E73747275637404
:102E5800696F6E220A000000417373657274696FAE
:102E68006E206661696C65643A202122756E65780A
:102E780070656374656420657863657074696F6EE6
:102E8800220A0000417373657274696F6E2066616F
:102E9800696C65643A202122756E737570706F7263
:102EA8007465642073617470206D6F6465220A0014
:040000058000000077
:00000001FF

View file

@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093079003930500001303F303A6
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7673D0A39
:102B8000B70508009387279E130700009385C5FFAC
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B6A0B70E008093012000D6
:102C70006310D70583A70600930E008093013000F0
:102C80006398D7039305100023A006002FA7B6A0D2
:102C9000930E000093014000631CD70183A7060038
:102CA000930E1000930150006394D701631A300013
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

View file

@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE7093074000930500001303F303F9
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B7B7F50F2C
:102B8000B7050800938767D2130700009385C5FF38
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B6E0B70E00809301200096
:102C70006310D70583A70600930E008093013000F0
:102C80006398D7039305F0FF23A006002FA7B6E0B3
:102C9000930E000093014000631CD70183A7060038
:102CA000930EF0FF930150006394D701631A300034
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

View file

@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE709307E003930500001303F30356
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B777470029
:102B8000B7050800938767FB130700009385C5FF0F
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B680B70E008093012000F6
:102C70006310D70583A70600B70E008093013000CC
:102C80006398D7039305F0FF23A006002FA7B68013
:102C9000930E000093014000631CD70183A7060038
:102CA000930EF0FF930150006394D701631A300034
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

View file

@ -1,275 +0,0 @@
:0200000480007A
:100000006F00C0006F20C0276F2080279300000082
:10001000130100009301000013020000930200008E
:100020001303000093030000130400009304000076
:10003000130500009305000013060000930600005E
:100040001307000093070000130800009308000046
:100050001309000093090000130A0000930A00002E
:10006000130B0000930B0000130C0000930C000016
:10007000130D0000930D0000130E0000930E0000FE
:10008000130F0000930F000097020000938202F804
:1000900073905230177100001301412DF32240F18B
:1000A0009392C2003301510073100134EF20103AD3
:1000B00017350000130505BA6F20D01583224508B7
:1000C0007390121483204500032185008321C5000D
:1000D0000322050183224501032385018323C501F2
:1000E00003240502832445028325C5020326050354
:1000F00083264503032785038327C50303280504B7
:1001000083284504032985048329C504032A05059A
:10011000832A4505032B8505832BC505032C05067E
:10012000832C4506032D8506832DC506032E050762
:10013000832E4507032F8507832FC50703258502D7
:1001400073002010731101142322110023263100A3
:1001500023284100232A5100232C6100232E710003
:1001600023208102232291022324A1022326B1020B
:100170002328C102232AD102232CE102232EF102DB
:1001800023200105232211052324210523263105DF
:1001900023284105232A5105232C6105232E7105AF
:1001A00023208107232291072324A1072326B107B7
:1001B0002328C107232AD107232CE107232EF10787
:1001C000F312011423245100F322001023205108BC
:1001D000F322101423225108F3223014232451084F
:1001E000F322201423265108130501006F20004735
:1010000000000000000000000000000000000000E0
:1010100000000000000000000000000000000000D0
:1010200000000000000000000000000000000000C0
:1010300000000000000000000000000000000000B0
:081040000000000000000000A8
:10200000B3E7C500B367F50093F73700B306C50023
:10201000638407023386C50093070500637ED502FB
:1020200003C705009385150093871700A38FE7FE6C
:10203000E398C5FE67800000E37ED5FE93070500A8
:1020400003A70500938747009385450023AEE7FE6D
:10205000E3E8D7FE6780000067800000B367C50033
:1020600093F737003306C5006380070293F5F50F39
:10207000930705006370C50493871700A38FB7FE0D
:10208000E31CF6FE6780000093F5F50F939785003B
:10209000B3E7B70093950701B3E5F500E374C5FE18
:1020A000930705009387470023AEB7FEE3ECC7FE16
:1020B000678000006780000083470500638E07008B
:1020C0009307050003C7170093871700E31C07FE5B
:1020D0003385A7406780000013050000678000007B
:1020E00083470500938515001305150003C7F5FF09
:1020F00063880700E386E7FE3385E74067800000DA
:10210000930700006FF05FFFB367B50093F73700E8
:10211000639E07021378C6FF330805016378050341
:10212000930705006F0000019387470093854500E2
:1021300063F8070183A6070003A70500E386E6FE10
:102140003385A7403306A640138507003386C500B4
:102150006F00400103C705008347F5FF9385150015
:10216000639AE70013051500E396C5FE130500000A
:10217000678000003385E740678000009307050013
:1021800003C705009387170093851500A38FE7FE0B
:10219000E31807FE6780000003470500930600026E
:1021A000930705006318D70003C71700938717002C
:1021B000E30CD7FE9306D0026300D7069306B00265
:1021C0006300D70483C607009305000063820604FA
:1021D0001305000093871700138606FD13172500CB
:1021E00083C607003305A700131515003305A600A5
:1021F000E39206FE638005023305A040678000007D
:1022000083C617009305000093871700E39206FC2E
:10221000130500006780000083C6170093051000B7
:1022200093871700E39606FA130500006FF09FFEF0
:1022300017F6FFFF130606DD032706008327460077
:102240009355F5413367F7006306070297F6FFFFE2
:10225000938646DF9307000023A0F60013080000D2
:1022600023A2060103270600832746003367F700F1
:10227000E31207FE2320A6002322B6006F00000011
:10228000130101FF1305903423261100EFF05FFACC
:10229000130101FE1306C1001307B10113039000DF
:1022A0006F008000138707009377F500B337F300C2
:1022B000B307F04093F777029376F500938707030F
:1022C000B387F6002300F7009396C5011355450028
:1022D0009307F7FF33E5A60093D54500E314E6FC2A
:1022E0000345C100230E01006302050693050600A5
:1022F00097F6FFFF938606D117F6FFFF130686D4E5
:1023000003A7060083A74600130805009385150060
:102310003367F700B70801016302070213070000E3
:102320002320E600930700002322F60003A70600FF
:1023300083A746003367F700E31207FE03C50500D5
:1023400023A0060123A21601E31C05FA13010102D2
:102350006780000037F6FFFF3307C500B7E70300CB
:102360006370F7149356C50093820640172300004C
:10237000130343C993972200B307F30003A7070091
:102380003375C5006306070293760704638C060E57
:1023900093760708639206189306F000639ED5169D
:1023A0001367070823A0E700730005126780000089
:1023B0001747000013074704832507006384051CA3
:1023C00083A74500174600000326C6022320F70016
:1023D0006382C70C03A7050093972200B307F3009D
:1023E0001357C7001317A700136EF70D1366F701F5
:1023F00023A0C7017300051297470000938707E0E9
:1024000093963600B386D70083A706006392071E13
:1024100083A7050023A0F60083A74500B7050400A5
:1024200023A2F600F3A50510B707C0FFB307F50018
:10243000B716000013070500B386D70083AE070068
:1024400003AE470083A8870003A8C7002320D70155
:102450002322C7012324170123260701938707019D
:1024600013070701E39CD7FC739005109397220094
:10247000B307F30023A0C700730005120F1000007C
:10248000678000001367070423A0E70073000512AC
:10249000678000009747000023AE07F46FF09FF3BA
:1024A00013051004971500009385858297F6FFFFAA
:1024B000938646B517F6FFFF1306C6B803A70600B6
:1024C00083A7460013030500938515003367F700C3
:1024D000B703010163020702930700002320F600FF
:1024E000130800002322060103A7060083A7460065
:1024F0003367F700E31207FE03C5050023A066005B
:1025000023A27600E31C05FA130101FF1305300036
:1025100023261100EFF0DFD113051004970500000A
:102520009385457F97F6FFFF9386C6AD17F6FFFFAD
:10253000130646B103A7060083A74600130E050045
:10254000938515003367F700B70E01016302070298
:10255000930700002320F600130800002322060141
:1025600003A7060083A746003367F700E31207FEC0
:1025700003C5050023A0C60123A2D601E31C05FA6A
:102580006FF09FF813051004970500009385057DF3
:1025900097F6FFFF938606A717F6FFFF130686AA96
:1025A00003A7060083A74600130F050093851500B7
:1025B0003367F700B70F01016302070293070000BA
:1025C0002320F600130800002322060103A70600BB
:1025D00083A746003367F700E31207FE03C5050033
:1025E00023A0E60123A2F601E31C05FA6FF0DFF158
:1025F00013051004970500009385C57797F6FFFF34
:10260000938646A017F6FFFF1306C6A303A706008E
:1026100083A7460013080500938515003367F7006C
:10262000B708010163020702130700002320E60038
:10263000930700002322F60003A7060083A74600A5
:102640003367F700E31207FE03C5050023A0060168
:1026500023A21601E31C05FA6FF01FEB8325C508C2
:10266000130101FB23248104232611042322910456
:1026700023202105232E3103232C4103232A510338
:10268000232861032326710323248103232291033A
:102690002320A103232EB10193078000130405001A
:1026A0006386F516930720006380F506938745FF40
:1026B000130710006376F7009307F0006392F5228A
:1026C00003258408EFF01FC91305040003248104C7
:1026D0008320C10483244104032901048329C10305
:1026E000032A8103832A4103032B0103832BC102A5
:1026F000032C8102832C4102032D0102832DC10191
:10270000130101056FD09F9B03274508937737007E
:1027100063980708EF078000731030000327070055
:1027200083A70700630AF706130510049705000046
:102730009385C57097F6FFFF9386C68C17F6FFFF4B
:102740001306469003A7060083A74600130805005A
:10275000938515003367F700B7080101630207028C
:10276000130700002320E600930700002322F60051
:1027700003A7060083A746003367F700E31207FEAE
:1027800003C5050023A0060123A21601E31C05FAD8
:1027900013053000EFF0DFA913051000EFF05FA97B
:1027A00097050000938545671306100497F6FFFF11
:1027B0009386468517F5FFFF1305C58803A7060016
:1027C00083A74600130E0600938515003367F700B4
:1027D000B70E010163020702930700002320F500F2
:1027E000130800002322050103A7060083A7460063
:1027F0003367F700E31207FE03C6050023A0C601F6
:1028000023A2D601E31C06FA6FF09FF8032B850282
:10281000371C0000974400009384449E171D00005D
:10282000130D4D7EB70C0400974B0000938B8BBCAF
:102830006F00C00123A2870023A08B00B717000000
:10284000330CFC00B7F703006302FC1C9357CC0069
:10285000139437003386840003260600E30006FE47
:102860009387074093972700B307FD0083A70700CE
:1028700013F60704630C06122326F100F3AD0C10C7
:10288000B707C0FFB305FC003716000013050C00A6
:102890002324B100EFF05F87630005028327C100A6
:1028A0008325810093F707086382070A3716000023
:1028B00013050C00EFF0CFF43384840073900D10F7
:1028C00083A70B0023200400E39607F69747000038
:1028D000938787B223A08B0023A087006FF01FF699
:1028E00093051004170600001306065897E6FFFF2D
:1028F0009386467117E5FFFF1305C57403A706000D
:1029000083A7460013830500130616003367F700FC
:10291000B703010163020702930700002320F500BB
:10292000130800002322050103A7060083A7460021
:102930003367F700E31207FE8345060023A0660015
:1029400023A27600E39C05FA6FF09FE4930710043E
:10295000170600001306064997E6FFFF9386866A6E
:1029600097E5FFFF9385056E138907001306160090
:10297000B70901016F004001930700001308000030
:1029800023A0F50023A2050103A7060083A74600A4
:102990003367F700E31207FE8347060023A02601F2
:1029A00023A23601E39207FC6FF09FDE9307100429
:1029B000170600001306C63F97E6FFFF938686645E
:1029C00097E5FFFF93850568138A07001306160035
:1029D000B70A01016F0040019307000013080000CF
:1029E00023A0F50023A2050103A7060083A7460044
:1029F0003367F700E31207FE8347060023A0460172
:102A000023A25601E39207FC6FF09FD813050B0039
:102A1000EFF01F82F32740F163920716172600009C
:102A20001306465E9357C600130101F69397A7005D
:102A3000232E1108232C8108971500009385855CAF
:102A400093E7170023A0F500B707002093D6C50031
:102A5000370700809387F70C232EF6FEB3E7E600D6
:102A600073900718F3260018639AD716130405000D
:102A70001347F7FF9307F00197020000938242018A
:102A8000F39252307310073B7390073A97D7BF7F8A
:102A90009387876B73905710F3270034B708C07F74
:102AA000B387170173900714B7B700009387071017
:102AB00073902730B7E701007390073073504030B0
:102AC0009737C07F93870754174700002326F79254
:102AD0009737C07F9387077217470000232CF79022
:102AE00037030800173700001307C751173E0000CF
:102AF000130ECE709307C000930500001303F30379
:102B0000938888001396F50193D61700B366D60014
:102B100033866700B3C7F600330817011316C600E3
:102B2000939757002320C7002322070193F707023A
:102B300013078700B3E7F60093D51500E314EEFC06
:102B400013060009930500001305010097370000E4
:102B500023A4076AEFF08FD0B70700803304F40096
:102B60001305010023228108EFD04FD58320C1092E
:102B7000032481091301010A67800000B707FA03E3
:102B8000B705080093870722130700009385C5FF48
:102B900037080080370500406F00C0022FA00600F4
:102BA0001316F70193D61700B366D600B3C7D70044
:102BB0009397E7013376F5001357170093870600C4
:102BC0003367E600B3F6B70013F61700B3860601C5
:102BD000E31606FC03A006006FF09FFC93051004AB
:102BE000170600001306062B97E6FFFF9386864123
:102BF00017E5FFFF1305054503A7060083A7460059
:102C000013880500130616003367F700B7080101A3
:102C100063020702130700002320E500930700006A
:102C20002322F50003A7060083A746003367F700B9
:102C3000E31207FE8345060023A0060123A2160126
:102C4000E39C05FA13053000EFF08FDE678000008B
:102C50003705008093050080970600009386863A2A
:102C600023A0A6002FA7B6C0B70E008093012000B6
:102C70006310D70583A70600B70E008093013000CC
:102C80006398D7039305F0FF23A006002FA7B6C0D3
:102C9000930E000093014000631CD70183A7060038
:102CA000930E0000930150006394D701631A300023
:102CB00013951100630005001365150073000000F3
:0C2CC0001305100073000000731000C02A
:102CCC00417373657274696F6E206661696C6564BB
:102CDC003A2061646472203E3D202831554C203CE2
:102CEC003C203132292026262061646472203C204D
:102CFC003633202A202831554C203C3C20313229B7
:102D0C000A000000417373657274696F6E2066610E
:102D1C00696C65643A20212870745B315D5B616479
:102D2C0064722F2831554C203C3C203132295D20D7
:102D3C0026203078303830292026262063617573A0
:102D4C0065203D3D203078660A00000041737365B4
:102D5C007274696F6E206661696C65643A206E6F7F
:102D6C0064650A00417373657274696F6E206661E5
:102D7C00696C65643A20757365725F6D617070691A
:102D8C006E675B616464722F2831554C203C3C208B
:102D9C003132295D2E61646472203D3D20300A0081
:102DAC00417373657274696F6E206661696C6564DA
:102DBC003A2070745B315D5B616464722F2831550D
:102DCC004C203C3C203132295D2026203078303498
:102DDC00300A0000417373657274696F6E2066610E
:102DEC00696C65643A2070745B315D5B616464721C
:102DFC002F2831554C203C3C203132295D20262097
:102E0C0030783038300A0000417373657274696F22
:102E1C006E206661696C65643A2074662D3E65703F
:102E2C006320252034203D3D20300A00417373651A
:102E3C007274696F6E206661696C65643A20212238
:102E4C00696C6C6567616C20696E73747275637400
:102E5C00696F6E220A000000417373657274696FAA
:102E6C006E206661696C65643A202122756E657806
:102E7C0070656374656420657863657074696F6EE2
:102E8C00220A0000417373657274696F6E2066616B
:102E9C00696C65643A202122756E737570706F725F
:102EAC007465642073617470206D6F6465220A0010
:040000058000000077
:00000001FF

Some files were not shown because too many files have changed in this diff Show more