Restructure

This commit is contained in:
felsabbagh3
2019-03-22 04:14:52 -04:00
parent 097e0217de
commit 6c64fa35f8
239 changed files with 3839 additions and 819 deletions

BIN
emulator/.DS_Store vendored Normal file

Binary file not shown.

0
emulator/BUGS Normal file
View File

12
emulator/LICENSE Normal file
View File

@@ -0,0 +1,12 @@
Copyright (c) 2011, Georgia Institute of Technology
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

54
emulator/Makefile Normal file
View File

@@ -0,0 +1,54 @@
################################################################################
# HARPtools by Chad D. Kersey, Summer 2011 #
################################################################################
CXXFLAGS ?= -std=c++11 -fPIC -O3 # -g -DUSE_DEBUG=3 -DPRINT_ACTIVE_THREADS
LDLIBS ?= -pthread
PREFIX ?= /usr/local
LIB_OBJS=args.o mem.o core.o instruction.o enc.o util.o
all: harptool libharplib.so libharplib.a #libqsim-harp.so
# Use -static so we don't have to install the library in order to just run
# Harptool.
harptool: harptool.o libharplib.a
$(CXX) $(LDFLAGS) -o $@ harptool.o libharplib.a $(LDLIBS)
libharplib.so: $(LIB_OBJS)
$(CXX) -shared -o $@ $(LIB_OBJS) $(LDLIBS)
libharplib.a: $(LIB_OBJS)
ar rcs $@ $(LIB_OBJS)
args.o : args.cpp include/args.h
enc.o : enc.cpp include/types.h include/util.h include/enc.h include/archdef.h\
include/instruction.h
harptool.o : harptool.cpp include/types.h include/core.h include/enc.h \
include/instruction.h include/mem.h include/obj.h \
include/archdef.h include/args.h include/help.h include/debug.h
instruction.o : instruction.cpp include/instruction.h include/obj.h \
include/core.h include/debug.h include/asm-tokens.h
util.o : util.cpp include/types.h include/util.h
mem.o : mem.cpp include/types.h include/util.h include/mem.h include/debug.h \
include/core.h
core.o : core.cpp include/types.h include/util.h include/mem.h \
include/debug.h include/archdef.h include/core.h
#QSIM_CXXFLAGS=-DEMU_INSTRUMENTATION
#
#libqsim-harp.so: args.cpp enc.cpp instruction.cpp obj.cpp util.cpp mem.cpp \
# core.cpp qsim-harp.cpp lex.yy.o include/qsim-harp.h \
# include/types.h include/core.h include/util.h include/enc.h \
# include/archdef.h include/instruction.h include/asm-tokens.h \
# include/mem.h
# $(CXX) $(CXXFLAGS) $(QSIM_CXXFLAGS) -shared -o $@ $^
install:
cp libharplib.so $(PREFIX)/lib
cp harptool $(PREFIX)/bin
mkdir -p $(PREFIX)/include/harp
cp include/* $(PREFIX)/include/harp
clean:
rm -f *~ \#* *.o *.a *.so include/*~ include/\#* harptool

14
emulator/WISHLIST Normal file
View File

@@ -0,0 +1,14 @@
- Anonymous chunks whose names are not saved by the object writer.
- 32-bit instruction encoding for larger-pointered architecture versions.
- HOFDump mode for HARPTool/HOFTool
- Make operation information tables into member functions of Instruction, if
possible.
- Anonymous assigned values in the assembler.
- References (pointers) as .word directive contents in the assembler.
- Instruction validation before encoding.
- Make readError in obj.cpp throw something instead of printing a message and
exiting.
- Limit checking for byte/word encoders (e.g. 255 pRegs, 256 regs for byte)
- Eliminate the tmp_buf nonsense from the chunk encoder.
- Loosen arch restrictions imposed for interoperability (the number of lanes is
typically unimportant)

52
emulator/args.cpp Normal file
View File

@@ -0,0 +1,52 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include "include/args.h"
#include <iostream>
#include <string>
using namespace HarpTools;
using std::string;
std::string CommandLineArg::helpString;
std::map<string, CommandLineArg *> CommandLineArg::longArgs;
std::map<string, CommandLineArg *> CommandLineArg::shortArgs;
CommandLineArg::CommandLineArg(string s, string l, const char *helpText)
{
helpString += helpText;
longArgs[l] = this;
shortArgs[s] = this;
}
CommandLineArg::CommandLineArg(string l, const char *helpText) {
helpString += helpText;
longArgs[l] = this;
}
void CommandLineArg::readArgs(int argc, char **argv) {
for (int i = 0; i < argc; i++) {
std::map<string, CommandLineArg *>::iterator
s = shortArgs.find(std::string(argv[i])),
l = longArgs.find(std::string(argv[i]));
if (s != shortArgs.end()) {
i += s->second->read(argc - i, &argv[i]);
} else if (l != longArgs.end()) {
i += l->second->read(argc - i, &argv[i]);
} else {
throw BadArg(string(argv[i]));
}
}
}
void CommandLineArg::clearArgs() {
shortArgs.clear();
longArgs.clear();
helpString = "";
}
void CommandLineArg::showHelp(std::ostream &os) {
os << helpString;
}

264
emulator/core.cpp Normal file
View File

@@ -0,0 +1,264 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
// #define USE_DEBUG 7
// #define PRINT_ACTIVE_THREADS
#include "include/types.h"
#include "include/util.h"
#include "include/archdef.h"
#include "include/mem.h"
#include "include/enc.h"
#include "include/core.h"
#include "include/debug.h"
#ifdef EMU_INSTRUMENTATION
#include "include/qsim-harp.h"
#endif
using namespace Harp;
using namespace std;
#ifdef EMU_INSTRUMENTATION
void Harp::reg_doRead(Word cpuId, Word regNum) {
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, true);
}
void Harp::reg_doWrite(Word cpuId, Word regNum) {
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, false);
}
#endif
Core::Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id):
a(a), iDec(d), mem(mem), steps(0)
{
for (unsigned i = 0; i < a.getNWarps(); ++i)
w.push_back(Warp(this));
w[0].activeThreads = 1;
w[0].spawned = true;
}
bool Core::interrupt(Word r0) {
w[0].interrupt(r0);
}
void Core::step() {
++steps;
#ifdef PRINT_ACTIVE_THREADS
cout << endl << "Threads:";
#endif
for (unsigned i = 0; i < w.size(); ++i) {
if (w[i].activeThreads) {
D(3, "Core step stepping warp " << i << '[' << w[i].activeThreads << ']');
w[i].step();
D(3, "Now " << w[i].activeThreads << " active threads in " << i);
}
#ifdef PRINT_ACTIVE_THREADS
for (unsigned j = 0; j < w[i].tmask.size(); ++j) {
if (w[i].activeThreads > j && w[i].tmask[j]) cout << " 1";
else cout << " 0";
if (j != w[i].tmask.size()-1 || i != w.size()-1) cout << ',';
}
#endif
}
#ifdef PRINT_ACTIVE_THREADS
cout << endl;
#endif
}
bool Core::running() const {
for (unsigned i = 0; i < w.size(); ++i)
if (w[i].running()) return true;
return false;
}
void Core::printStats() const {
unsigned long insts = 0;
for (unsigned i = 0; i < w.size(); ++i)
insts += w[i].insts;
cout << "Total steps: " << steps << endl;
cout << "Total insts: " << insts << endl;
for (unsigned i = 0; i < w.size(); ++i) {
cout << "=== Warp " << i << " ===" << endl;
w[i].printStats();
}
}
Warp::Warp(Core *c, Word id) :
core(c), pc(0), interruptEnable(true),
supervisorMode(true), activeThreads(0), reg(0), pred(0),
shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id),
spawned(false), steps(0), insts(0), loads(0), stores(0)
{
/* Build the register file. */
Word regNum(0);
for (Word j = 0; j < core->a.getNThds(); ++j) {
reg.push_back(vector<Reg<Word> >(0));
for (Word i = 0; i < core->a.getNRegs(); ++i) {
reg[j].push_back(Reg<Word>(id, regNum++));
}
pred.push_back(vector<Reg<bool> >(0));
for (Word i = 0; i < core->a.getNPRegs(); ++i) {
pred[j].push_back(Reg<bool>(id, regNum++));
}
tmask.push_back(true);
shadowTmask.push_back(true);
}
Word csrNum(0);
for (Word i = 0; i < (1<<12); i++)
{
csr.push_back(Reg<uint16_t>(id, regNum++));
}
/* Set initial register contents. */
reg[0][0] = (core->a.getNThds()<<(core->a.getWordSize()*8 / 2)) | id;
}
void Warp::step() {
Size fetchPos(0), decPos, wordSize(core->a.getWordSize());
vector<Byte> fetchBuffer(wordSize);
if (activeThreads == 0) return;
++steps;
D(3, "in step pc=0x" << hex << pc);
// std::cout << "pc: " << hex << pc << "\n";
/* Fetch and decode. */
if (wordSize < sizeof(pc)) pc &= ((1ll<<(wordSize*8))-1);
Instruction *inst;
bool fetchMore;
do {
/* Todo: speed this up for the byte encoder? */
try {
fetchMore = false;
unsigned fetchSize(wordSize - (pc+fetchPos)%wordSize);
fetchBuffer.resize(fetchPos + fetchSize);
Word fetched = core->mem.fetch(pc + fetchPos, supervisorMode);
writeWord(fetchBuffer, fetchPos, fetchSize, fetched);
decPos = 0;
inst = core->iDec.decode(fetchBuffer, decPos);
} catch (OutOfBytes o) {
D(3, "Caught OutOfBytes. Fetching more.");
fetchMore = true;
} catch (MemoryUnit::PageFault pf) {
fetchPos = 0;
fetchMore = true;
interrupt(pf.notFound?1:2);
reg[0][1] = pf.faultAddr;
}
} while (fetchMore);
D(3, "Fetched at 0x" << hex << pc);
D(3, "0x" << hex << pc << ": " << *inst);
#ifdef EMU_INSTRUMENTATION
{ Addr pcPhys(core->mem.virtToPhys(pc));
Harp::OSDomain::osDomain->
do_inst(0, pc, pcPhys, decPos, core->mem.getPtr(pcPhys, decPos),
(enum inst_type)inst->instTable[inst->getOpcode()].iType);
}
#endif
// Update pc
pc += decPos;
// Execute
try {
inst->executeOn(*this);
} catch (MemoryUnit::PageFault pf) {
D(2, "Interrupt: Page fault");
pc -= decPos; /* Reset to beginning of faulting address. */
interrupt(pf.notFound?1:2);
reg[0][1] = pf.faultAddr;
} catch (DivergentBranchException e) {
D(2, "Interrupt 4: Divergent branch");
pc -= decPos;
interrupt(4);
} catch (DomainException e) {
D(2, "Interrupt: DomainException");
interrupt(5);
}
// At Debug Level 3, print debug info after each instruction.
#ifdef USE_DEBUG
if (USE_DEBUG >= 3) {
D(3, "Register state:");
for (unsigned i = 0; i < reg[0].size(); ++i) {
D_RAW(" %r" << dec << i << ':');
for (unsigned j = 0; j < reg.size(); ++j)
D_RAW(' ' << hex << reg[j][i] << ' ');
D_RAW('(' << shadowReg[i] << ')' << endl);
}
// D(3, "Predicate state:");
// D_RAW(" ");
// for (unsigned j = 0; j < pred.size(); ++j) {
// for (unsigned i = 0; i < pred[j].size(); ++i) D_RAW(pred[j][i]);
// D_RAW(endl);
// }
// D_RAW(" (");
// for (unsigned i = 0; i < shadowPReg.size(); ++i) D_RAW(shadowPReg[i]);
// D_RAW(')' << endl);
D(3, "Thread mask:");
D_RAW(" ");
for (unsigned i = 0; i < tmask.size(); ++i) D_RAW(tmask[i] << ' ');
D_RAW(endl);
D_RAW(endl);
D_RAW(endl);
}
#endif
// Clean up.
delete inst;
}
bool Warp::interrupt(Word r0) {
if (!interruptEnable) return false;
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->do_int(0, r0);
#endif
shadowActiveThreads = activeThreads;
shadowTmask = tmask;
shadowInterruptEnable = interruptEnable; /* For traps. */
shadowSupervisorMode = supervisorMode;
for (Word i = 0; i < reg[0].size(); ++i) shadowReg[i] = reg[0][i];
for (Word i = 0; i < pred[0].size(); ++i) shadowPReg[i] = pred[0][i];
for (Word i = 0; i < reg.size(); ++i) tmask[i] = 1;
shadowPc = pc;
activeThreads = 1;
interruptEnable = false;
supervisorMode = true;
reg[0][0] = r0;
pc = core->interruptEntry;
return true;
}
void Warp::printStats() const {
cout << "Steps : " << steps << endl
<< "Insts : " << insts << endl
<< "Loads : " << loads << endl
<< "Stores: " << stores << endl;
unsigned const grade = reg[0][28];
if (grade == 1) cout << "GRADE: PASSED\n";
else cout << "GRADE: FAILED " << (grade >> 1) << "\n";
}

405
emulator/enc.cpp Normal file
View File

@@ -0,0 +1,405 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <vector>
#include "include/debug.h"
#include "include/types.h"
#include "include/util.h"
#include "include/enc.h"
#include "include/archdef.h"
#include "include/instruction.h"
using namespace std;
using namespace Harp;
ByteDecoder::ByteDecoder(const ArchDef &ad) {
wordSize = ad.getWordSize();
}
static void decodeError(string msg) {
cout << "Instruction decoder error: " << msg << '\n';
exit(1);
}
void Encoder::encodeChunk(DataChunk &dest, const TextChunk &src) {
// typedef vector<Instruction*>::const_iterator vec_it;
// const vector<Instruction*> &s(src.instructions);
// vector<Byte> &d(dest.contents);
// /* Keep encoding the instructions. */
// Size n = 0;
// /* For each instruction. */
// for (vec_it i = s.begin(); i != s.end(); i++) {
// Ref *ref;
// /* Perform the encoding. */
// n += encode(ref, d, n, **i);
// /* Add reference if necessary. */
// if (ref != NULL) {
// ref->ibase = n;
// dest.refs.push_back(ref);
// }
// }
// dest.alignment = src.alignment;
// dest.flags = src.flags;
// dest.address = src.address;
// dest.bound = src.bound;
// if (src.isGlobal()) dest.setGlobal();
// d.resize(n);
// dest.size = n;
}
void Decoder::decodeChunk(TextChunk &dest, const DataChunk &src) {
// typedef vector<Instruction*>::const_iterator vec_it;
// const vector<Byte> &v(src.contents);
// Size n = 0;
// setRefs(src.refs);
// while (n < src.contents.size()) {
// Instruction *inst = decode(v, n);
// if (inst->hasRefLiteral()) {
// dest.refs.push_back(inst->getRefLiteral());
// }
// dest.instructions.push_back(inst);
// }
// dest.alignment = src.alignment;
// dest.flags = src.flags;
// dest.address = src.address;
// dest.bound = src.bound;
// if (src.isGlobal()) dest.setGlobal();
// clearRefs();
// }
// void Decoder::setRefs(const std::vector<Ref*> &refVec) {
// haveRefs = true;
// typedef std::vector<Ref*>::const_iterator vec_ci;
// for (vec_ci i = refVec.begin(); i != refVec.end(); i++) {
// OffsetRef *oref = dynamic_cast<OffsetRef*>(*i);
// if (oref) {
// refMap[oref->getOffset()] = *i;
// } else {
// decodeError("Unknown Ref type in Decoder::setRefs");
// }
// }
}
Instruction *ByteDecoder::decode(const vector<Byte> &v, Size &n) {
Instruction &inst = *(new Instruction());
// uint8_t pred = readByte(v, n);
// if (pred != 0xff) inst.setPred(pred);
// unsigned op = readByte(v, n);
// inst.setOpcode(Instruction::Opcode(op));
// bool usedImm = false;
// switch ((Instruction::instTable[op]).argClass) {
// case Instruction::AC_NONE:
// break;
// case Instruction::AC_2REG:
// inst.setDestReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// break;
// case Instruction::AC_2IMM:
// inst.setDestReg(readByte(v, n));
// inst.setSrcImm(readWord(v, n, wordSize));
// usedImm = true;
// break;
// case Instruction::AC_3REG:
// inst.setDestReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// break;
// case Instruction::AC_3PREG:
// inst.setDestPReg(readByte(v, n));
// inst.setSrcPReg(readByte(v, n));
// inst.setSrcPReg(readByte(v, n));
// break;
// case Instruction::AC_3IMM:
// inst.setDestReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// inst.setSrcImm(readWord(v, n, wordSize));
// usedImm = true;
// break;
// case Instruction::AC_3REGSRC:
// inst.setSrcReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// break;
// case Instruction::AC_1IMM:
// inst.setSrcImm(readWord(v, n, wordSize));
// usedImm = true;
// break;
// case Instruction::AC_1REG:
// inst.setSrcReg(readByte(v, n));
// break;
// case Instruction::AC_3IMMSRC:
// inst.setSrcReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// inst.setSrcImm(readWord(v, n, wordSize));
// usedImm = true;
// break;
// case Instruction::AC_PREG_REG:
// inst.setDestPReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// break;
// case Instruction::AC_2PREG:
// inst.setDestPReg(readByte(v, n));
// inst.setSrcPReg(readByte(v, n));
// break;
// case Instruction::AC_2REGSRC:
// inst.setSrcReg(readByte(v, n));
// inst.setSrcReg(readByte(v, n));
// break;
// default:
// decodeError("Unknown argument class.");
// }
// if (haveRefs && usedImm &&
// refMap.find(n - wordSize) != refMap.end()) {
// OffsetRef *oref = dynamic_cast<OffsetRef*>(refMap[n - wordSize]);
// if (!oref) {
// decodeError("Expected OffsetRef when decoding instruction stream.");
// }
// Ref *r = new SimpleRef(oref->name, *(Addr*)(inst.setSrcImm()),
// inst.hasRelImm());
// inst.setImmRef(*r);
// }
return &inst;
}
ByteEncoder::ByteEncoder(const ArchDef &ad) {
wordSize = ad.getWordSize();
}
Size ByteEncoder::encode(Ref *&ref, vector<Byte> &v, Size n0, Instruction &i) {
// Size n(n0);
// if (i.hasPred()) writeByte(v, n, i.getPred());
// else writeByte(v, n, 0xff);
// writeByte(v, n, Byte(i.getOpcode()));
// if (i.hasRDest()) {
// writeByte(v, n, Byte(i.getRDest()));
// } else if (i.hasPDest()) {
// writeByte(v, n, Byte(i.getPDest()));
// }
// for (RegNum j = 0; j < i.getNRSrc(); j++) {
// writeByte(v, n, Byte(i.getRSrc(j)));
// }
// for (RegNum j = 0; j < i.getNPSrc(); j++) {
// writeByte(v, n, Byte(i.getPSrc(j)));
// }
// ref = NULL;
// if (i.hasImm()) {
// if (i.hasRefLiteral()) {
// Ref *r = i.getRefLiteral();
// ref = new OffsetRef(r->name, v, n, wordSize*8, wordSize, i.hasRelImm());
// }
// writeWord(v, n, wordSize, i.getImm());
// }
// return n - n0;
return 0;
}
static unsigned ceilLog2(RegNum x) {
unsigned z = 0;
bool nonZeroInnerValues(false);
if (x == 0) return 0;
while (x != 1) {
z++;
if (x&1) nonZeroInnerValues = true;
x >>= 1;
}
if (nonZeroInnerValues) z++;
return z;
}
WordDecoder::WordDecoder(const ArchDef &arch) {
inst_s = arch.getWordSize() * 8;
opcode_s = 7;
reg_s = 5;
func3_s = 3;
shift_opcode = 0;
shift_rd = opcode_s;
shift_func3 = opcode_s + reg_s;
shift_rs1 = opcode_s + reg_s + func3_s;
shift_rs2 = opcode_s + reg_s + func3_s + reg_s;
shift_func7 = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_j_u_immed = opcode_s + reg_s;
shift_s_b_immed = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_i_immed = opcode_s + reg_s + func3_s + reg_s;
reg_mask = 0x1f;
func3_mask = 0x7;
func7_mask = 0x7f;
opcode_mask = 0x7f;
i_immed_mask = 0xfff;
s_immed_mask = 0xfff;
b_immed_mask = 0x1fff;
u_immed_mask = 0xfffff;
j_immed_mask = 0xfffff;
}
static Word signExt(Word w, Size bit, Word mask) {
if (w>>(bit-1)) w |= ~mask;
return w;
}
Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx) {
Word code(readWord(v, idx, inst_s/8));
// std::cout << "code: " << (int) code << " v: " << v << " indx: " << idx << "\n";
Instruction &inst = * new Instruction();
// bool predicated = (code>>(n-1));
bool predicated = false;
if (predicated) { inst.setPred((code>>(inst_s-p-1))&pMask); }
Opcode op = (Opcode)((code>>shift_opcode)&opcode_mask);
// std::cout << "opcode: " << op << "\n";
inst.setOpcode(op);
bool usedImm(false);
Word imeed, dest_bits, imm_bits, bit_11, bits_4_1, bit_10_5,
bit_12, bits_19_12, bits_10_1, bit_20, unordered, func3;
// std::cout << "op: " << std::hex << op << " what " << instTable[op].iType << "\n";
switch(instTable[op].iType)
{
case InstType::N_TYPE:
break;
case InstType::R_TYPE:
inst.setPred((code>>shift_rs1) & reg_mask);
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
inst.setFunc7 ((code>>shift_func7) & func7_mask);
break;
case InstType::I_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setFunc7 ((code>>shift_func7) & func7_mask);
func3 = (code>>shift_func3) & func3_mask;
inst.setFunc3 (func3);
if ((func3 == 5) && (op != L_INST))
{
// std::cout << "func7: " << func7 << "\n";
inst.setSrcImm(signExt(((code>>shift_rs2)&reg_mask), 5, reg_mask));
}
else
{
inst.setSrcImm(signExt(code>>shift_i_immed, 12, i_immed_mask));
}
usedImm = true;
break;
case InstType::S_TYPE:
// std::cout << "************STORE\n";
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask);
imeed = (imm_bits << reg_s) | dest_bits;
// std::cout << "ENC: store imeed: " << imeed << "\n";
inst.setSrcImm(signExt(imeed, 12, s_immed_mask));
usedImm = true;
break;
case InstType::B_TYPE:
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask);
bit_11 = dest_bits & 0x1;
bits_4_1 = dest_bits >> 1;
bit_10_5 = imm_bits & 0x3f;
bit_12 = imm_bits >> 6;
imeed = 0 | (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
inst.setSrcImm(signExt(imeed, 13, b_immed_mask));
usedImm = true;
break;
case InstType::U_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcImm(signExt(code>>shift_j_u_immed, 20, u_immed_mask));
usedImm = true;
break;
case InstType::J_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask);
// [20 | 10:1 | 11 | 19:12]
unordered = code>>shift_j_u_immed;
bits_19_12 = unordered & 0xff;
bit_11 = (unordered>>8) & 0x1;
bits_10_1 = (unordered >> 9) & 0x3ff;
bit_20 = (unordered>>19) & 0x1;
imeed = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
inst.setSrcImm(signExt(imeed, 20, j_immed_mask));
usedImm = true;
break;
defualt:
cout << "Unrecognized argument class in word decoder.\n";
exit(1);
}
if (haveRefs && usedImm && refMap.find(idx-n/8) != refMap.end()) {
Ref *srcRef = refMap[idx-n/8];
/* Create a new ref tied to this instruction. */
Ref *r = new SimpleRef(srcRef->name, *(Addr*)inst.setSrcImm(),
inst.hasRelImm());
inst.setImmRef(*r);
}
D(2, "Decoded 0x" << hex << code << " into: " << inst << '\n');
return &inst;
}

BIN
emulator/harptool Executable file

Binary file not shown.

132
emulator/harptool.cpp Normal file
View File

@@ -0,0 +1,132 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>
#include <stdlib.h>
#include "include/debug.h"
#include "include/types.h"
#include "include/core.h"
#include "include/enc.h"
#include "include/instruction.h"
#include "include/mem.h"
#include "include/obj.h"
#include "include/archdef.h"
#include "include/args.h"
#include "include/help.h"
using namespace Harp;
using namespace HarpTools;
using namespace std;
enum HarpToolMode { HARPTOOL_MODE_ASM, HARPTOOL_MODE_DISASM, HARPTOOL_MODE_EMU,
HARPTOOL_MODE_LD, HARPTOOL_MODE_HELP };
HarpToolMode findMode(int argc, char** argv) {
bool mode_asm, mode_disasm, mode_emu, mode_ld, mode_help;
if (argc == 0) return HARPTOOL_MODE_HELP;
CommandLineArgFlag fh("--help", "-h", "", mode_help);
CommandLineArgFlag fa("-A", "--asm", "", mode_asm);
CommandLineArgFlag fd("-D", "--disasm", "", mode_disasm);
CommandLineArgFlag fe("-E", "--emu", "", mode_emu);
CommandLineArgFlag fl("-L", "--ld", "", mode_ld);
CommandLineArg::readArgs((argc == 0?0:1), argv);
CommandLineArg::clearArgs();
if (mode_asm) return HARPTOOL_MODE_ASM;
if (mode_disasm) return HARPTOOL_MODE_DISASM;
if (mode_emu) return HARPTOOL_MODE_EMU;
if (mode_ld) return HARPTOOL_MODE_LD;
return HARPTOOL_MODE_HELP;
}
int emu_main(int argc, char **argv) {
string archString("rv32i"), imgFileName("a.dsfsdout.bin");
bool showHelp, showStats, basicMachine, batch;
/* Read the command line arguments. */
CommandLineArgFlag fh("-h", "--help", "", showHelp);
CommandLineArgSetter<string>fc("-c", "--core", "", imgFileName);
CommandLineArgSetter<string>fa("-a", "--arch", "", archString);
CommandLineArgFlag fs("-s", "--stats", "", showStats);
CommandLineArgFlag fb("-b", "--basic", "", basicMachine);
CommandLineArgFlag fi("-i", "--batch", "", batch);
CommandLineArg::readArgs(argc, argv);
if (showHelp) {
cout << Help::emuHelp;
return 0;
}
/* Instantiate a Core, RAM, and console output. */
ArchDef arch(archString);
Decoder *dec;
switch (arch.getEncChar()) {
case 'b': dec = new ByteDecoder(arch); break;
case 'w': dec = new WordDecoder(arch); break;
case 'r': dec = new WordDecoder(arch); break;
default:
cout << "Unrecognized decoder type: '" << arch.getEncChar() << "'.\n";
return 1;
}
// std::cout << "TESTING: " << tests[t] << "\n";
MemoryUnit mu(4096, arch.getWordSize(), basicMachine);
Core core(arch, *dec, mu/*, ID in multicore implementations*/);
// RamMemDevice mem(imgFileName.c_str(), arch.getWordSize());
RAM old_ram;
old_ram.loadHexImpl(imgFileName.c_str());
// old_ram.loadHexImpl(tests[t]);
// MemDevice * memory = &old_ram;
ConsoleMemDevice console(arch.getWordSize(), cout, core, batch);
mu.attach(old_ram, 0);
mu.attach(console, 1ll<<(arch.getWordSize()*8 - 1));
// mu.attach(console, 0xf0000000);
// core.w[0].pc = 0x8000007c; // If I want to start at a specific location
std::cout << "ABOUT TO START\n";
while (core.running()) { console.poll(); core.step(); }
if (showStats) core.printStats();
std::cout << "\n";
return 0;
}
int main(int argc, char** argv) {
try {
switch (findMode(argc - 1, argv + 1)) {
case HARPTOOL_MODE_ASM: cout << "ASM not supported\n";
case HARPTOOL_MODE_DISASM: cout << "DISASM not supported\n";
case HARPTOOL_MODE_EMU: return emu_main (argc - 2, argv + 2);
case HARPTOOL_MODE_LD: cout << "LD not supported\n";
case HARPTOOL_MODE_HELP:
default:
cout << "Usage:\n" << Help::mainHelp;
return 0;
}
} catch (BadArg ba) {
cout << "Unrecognized argument \"" << ba.arg << "\".\n";
return 1;
}
return 0;
}

116
emulator/include/archdef.h Normal file
View File

@@ -0,0 +1,116 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ARCHDEF_H
#define __ARCHDEF_H
#include <string>
#include <sstream>
#include <cstdlib>
#include <stdio.h>
#include "types.h"
namespace Harp {
class ArchDef {
public:
struct Undefined {};
ArchDef(const std::string &s) {
std::istringstream iss(s.c_str());
wordSize = 4;
encChar = 'w';
nRegs = 32;
nPRegs = 0;
nThds = 8;
nWarps = 8;
extent = EXT_WARPS;
// if (!iss) { extent = EXT_NULL; return; }
// iss >> encChar;
// if (!iss) { extent = EXT_WORDSIZE; return; }
// iss >> nRegs;
// if (!iss) { extent = EXT_ENC; return; }
// char sep;
// iss >> sep >> nPRegs;
// if (!iss || sep != '/') { extent = EXT_REGS; return; }
// iss >> sep >> nThds;
// if (!iss || sep != '/') { extent = EXT_PREGS; return; }
// iss >> sep >> nWarps;
// if (!iss || sep != '/') { extent = EXT_THDS; return; }
// extent = EXT_WARPS;
}
operator std::string () const {
if (extent == EXT_NULL) return "";
std::ostringstream oss;
if (extent >= EXT_WORDSIZE) oss << wordSize;
if (extent >= EXT_ENC ) oss << encChar;
if (extent >= EXT_REGS ) oss << nRegs;
if (extent >= EXT_PREGS ) oss << '/' << nPRegs;
if (extent >= EXT_THDS ) oss << '/' << nThds;
if (extent >= EXT_WARPS ) oss << '/' << nWarps;
return oss.str();
}
bool operator==(const ArchDef &r) const {
Extent minExtent(r.extent > extent ? extent : r.extent);
// Can't be equal if we can't specify a binary encoding at all.
if (minExtent < EXT_PREGS) return false;
if (minExtent >= EXT_WORDSIZE) { if (wordSize!=r.wordSize) return false; }
if (minExtent >= EXT_ENC ) { if (encChar != r.encChar) return false; }
if (minExtent >= EXT_REGS ) { if (nRegs != r.nRegs) return false; }
if (minExtent >= EXT_PREGS ) { if (nPRegs != r.nPRegs) return false; }
if (minExtent >= EXT_THDS ) { if (nThds != r.nThds) return false; }
if (minExtent >= EXT_WARPS ) { if (nWarps != r.nWarps) return false; }
return true;
}
bool operator!=(const ArchDef &r) const { return !(*this == r); }
Size getWordSize() const {
if (extent < EXT_WORDSIZE) throw Undefined(); else return wordSize;
}
char getEncChar() const {
if (extent<EXT_ENC||encChar=='x') throw Undefined(); else return encChar;
}
RegNum getNRegs() const {
if (extent < EXT_REGS) throw Undefined(); else return nRegs;
}
RegNum getNPRegs() const {
if (extent < EXT_PREGS) throw Undefined(); else return nPRegs;
}
ThdNum getNThds() const {
if (extent < EXT_THDS) throw Undefined(); else return nThds;
}
ThdNum getNWarps() const {
if (extent < EXT_WARPS) throw Undefined(); else return nWarps;
}
private:
enum Extent {
EXT_NULL, EXT_WORDSIZE, EXT_ENC, EXT_REGS, EXT_PREGS, EXT_THDS, EXT_WARPS
};
Extent extent;
Size wordSize;
ThdNum nThds, nWarps;
RegNum nRegs, nPRegs;
char encChar;
};
};
#endif

61
emulator/include/args.h Normal file
View File

@@ -0,0 +1,61 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ARGS_H
#define __ARGS_H
#include <iostream>
#include <string>
#include <sstream>
#include <map>
namespace HarpTools {
struct BadArg { BadArg(std::string s) : arg(s) {} std::string arg; };
class CommandLineArg {
public:
CommandLineArg(std::string s, std::string l, const char *helpText);
CommandLineArg(std::string l, const char *helpText);
virtual int read(int argc, char** argv) = 0;
static void readArgs(int argc, char **argv);
static void clearArgs();
static void showHelp(std::ostream &os);
private:
static std::string helpString;
static std::map<std::string, CommandLineArg *> longArgs;
static std::map<std::string, CommandLineArg *> shortArgs;
};
template <typename T> class CommandLineArgSetter : public CommandLineArg {
public:
CommandLineArgSetter(std::string s, std::string l, const char *ht, T &x) :
CommandLineArg(s, l, ht), x(x) {}
CommandLineArgSetter(std::string l, const char *ht, T &x) :
CommandLineArg(l, ht), x(x) {}
int read(int argc, char **argv) {
std::istringstream iss(argv[1]);
iss >> x;
return 1;
}
private:
T &x;
};
class CommandLineArgFlag : public CommandLineArg {
public:
CommandLineArgFlag(std::string s, std::string l, const char *ht, bool &x) :
CommandLineArg(s, l, ht), x(x) { x = false; }
CommandLineArgFlag(std::string l, const char *ht, bool &x) :
CommandLineArg(l, ht), x(x) { x = false; }
int read(int argc, char **argv) { x = true; return 0; }
private:
bool &x;
};
};
#endif

View File

@@ -0,0 +1,16 @@
#ifndef HARPTOOL_ASM_TOKENS
#define HARPTOOL_ASM_TOKENS
namespace HarpTools {
enum AsmTokens {
ASM_T_DIR_DEF = 1, ASM_T_DIR_PERM, ASM_T_DIR_BYTE, ASM_T_DIR_WORD,
ASM_T_DIR_SPACE, ASM_T_DIR_STRING, ASM_T_DIR_ALIGN, ASM_T_DIR_ENTRY,
ASM_T_DIR_GLOBAL, ASM_T_DIR_ARG_NUM, ASM_T_DIR_ARG_STRING,
ASM_T_DIR_ARG_SYM, ASM_T_DIR_ARG_R, ASM_T_DIR_ARG_W, ASM_T_DIR_ARG_X,
ASM_T_DIR_END, ASM_T_LABEL, ASM_T_PRED, ASM_T_INST,
ASM_T_PREG, ASM_T_REG, ASM_T_REG_RA, ASM_T_REG_SP,
ASM_T_REG_FP, ASM_T_LIT, ASM_T_SYM, ASM_T_PEXP
};
};
#endif

145
emulator/include/core.h Normal file
View File

@@ -0,0 +1,145 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __CORE_H
#define __CORE_H
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <set>
#include "types.h"
#include "archdef.h"
#include "enc.h"
#include "mem.h"
#include "debug.h"
namespace Harp {
#ifdef EMU_INSTRUMENTATION
void reg_doWrite(Word cpuId, Word regNum);
void reg_doRead(Word cpuId, Word regNum);
#endif
template <typename T> class Reg {
public:
Reg(): cpuId(0), regNum(0), val(0) {}
Reg(Word c, Word n): cpuId(c), regNum(n), val(0) {}
Reg &operator=(T r) { if (regNum) {val = r; doWrite();} return *this; }
operator T() const { doRead(); return val; }
void trunc(Size s) {
Word mask((~0ull >> (sizeof(Word)-s)*8));
val &= mask;
}
private:
Word cpuId, regNum;
T val;
#ifdef EMU_INSTRUMENTATION
/* Access size here is 8, representing the register size of 64-bit cores. */
void doWrite() const { reg_doWrite(cpuId, regNum); }
void doRead() const { reg_doRead(cpuId, regNum); }
#else
void doWrite() const {}
void doRead() const {}
#endif
};
// Entry in the IPDOM Stack
struct DomStackEntry {
DomStackEntry(
unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
std::vector<bool> &tm, Word pc
): pc(pc), fallThrough(false), uni(false)
{
std::cout << "DomStackEntry TMASK: ";
for (unsigned i = 0; i < m.size(); ++i)
{
std::cout << " " << (!bool(m[i][p]) && tm[i]);
tmask.push_back(!bool(m[i][p]) && tm[i]);
}
std::cout << "\n";
}
DomStackEntry(const std::vector<bool> &tmask):
tmask(tmask), fallThrough(true), uni(false) {}
bool fallThrough;
bool uni;
std::vector<bool> tmask;
Word pc;
};
class Warp;
class Core {
public:
Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0);
bool interrupt(Word r0);
bool running() const;
void step();
void printStats() const;
const ArchDef &a;
Decoder &iDec;
MemoryUnit &mem;
Word interruptEntry;
unsigned long steps;
std::vector<Warp> w;
std::map<Word, std::set<Warp *> > b; // Barriers
};
class Warp {
public:
Warp(Core *c, Word id=0);
void step();
bool interrupt(Word r0);
bool running() const { return activeThreads; }
#ifdef EMU_INSTRUMENTATION
bool getSupervisorMode() const { return supervisorMode; }
#endif
void printStats() const;
struct MemAccess {
MemAccess(bool w, Word a): wr(w), addr(a) {}
bool wr;
Word addr;
};
std::vector<MemAccess> memAccesses;
// private:
Core *core;
Word pc, shadowPc, id;
Size activeThreads, shadowActiveThreads;
std::vector<std::vector<Reg<Word> > > reg;
std::vector<std::vector<Reg<bool> > > pred;
std::vector<Reg<uint16_t> > csr;
std::vector<bool> tmask, shadowTmask;
std::stack<DomStackEntry> domStack;
std::vector<Word> shadowReg;
std::vector<bool> shadowPReg;
bool interruptEnable, shadowInterruptEnable, supervisorMode,
shadowSupervisorMode, spawned;
unsigned long steps, insts, loads, stores;
friend class Instruction;
};
};
#endif

29
emulator/include/debug.h Normal file
View File

@@ -0,0 +1,29 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Spring 2013
*******************************************************************************/
#ifndef __DEBUG_H
#define __DEBUG_H
// #define USE_DEBUG 9
#ifdef USE_DEBUG
#include <iostream>
#define D(lvl, x) do { \
using namespace std; \
if ((lvl) <= USE_DEBUG) { \
cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \
<< x << endl; \
} \
} while(0)
#define D_RAW(x) do { \
std::cout << x; \
} while (0)
#else
#define D(lvl, x) do {} while(0)
#endif
#endif

95
emulator/include/enc.h Normal file
View File

@@ -0,0 +1,95 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __ENC_H
#define __ENC_H
#include <map>
#include "types.h"
#include "instruction.h"
#include "obj.h"
namespace Harp {
class DataChunk;
class TextChunk;
class Ref;
class Encoder {
public:
Encoder() {}
virtual ~Encoder() {}
virtual Size encode(Ref *&ref, std::vector<Byte> &v, Size n,
Instruction &i) = 0;
void encodeChunk(DataChunk &dest, const TextChunk &src);
};
class Decoder {
public:
Decoder() : haveRefs(false) {}
Decoder(const std::vector<Ref*> &refVec) : haveRefs(true) {
setRefs(refVec);
}
virtual ~Decoder() {}
void setRefs(const std::vector<Ref*> &);
void clearRefs() { refMap.clear(); }
virtual Instruction *decode(const std::vector<Byte> &v, Size &n) = 0;
void decodeChunk(TextChunk &dest, const DataChunk &src);
protected:
bool haveRefs;
std::map <Size, Ref*> refMap;
};
class WordDecoder : public Decoder {
public:
WordDecoder(const ArchDef &);
virtual Instruction *decode(const std::vector<Byte> &v, Size &n);
private:
Size n, o, r, p, i1, i2, i3;
Word oMask, rMask, pMask, i1Mask, i2Mask, i3Mask;
// FARES
Size inst_s, opcode_s, reg_s, func3_s;
Size shift_opcode, shift_rd, shift_rs1, shift_rs2, shift_func3, shift_func7;
Size shift_j_u_immed, shift_s_b_immed, shift_i_immed;
Word reg_mask, func3_mask, func7_mask, opcode_mask, i_immed_mask,
s_immed_mask, b_immed_mask, u_immed_mask, j_immed_mask;
};
class ByteDecoder : public Decoder {
public:
ByteDecoder(const ArchDef &);
virtual Instruction *decode(const std::vector<Byte> &v, Size &n);
private:
Size wordSize;
};
class WordEncoder : public Encoder {
public:
WordEncoder(const ArchDef &);
virtual Size encode(Ref *&ref, std::vector<Byte> &v,
Size n, Instruction &i);
private:
Size n, o, r, p, i1, i2, i3;
Word oMask, rMask, pMask, i1Mask, i2Mask, i3Mask;
};
class ByteEncoder : public Encoder {
public:
ByteEncoder(const ArchDef &);
virtual Size encode(Ref *&ref, std::vector<Byte> &v,
Size n, Instruction &i);
private:
Size wordSize;
};
};
#endif

View File

@@ -0,0 +1,123 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <math.h>
#include <stdlib.h>
#include "types.h"
#ifdef DEBUG
#include <iostream>
#define DEBUGMSG(x) do { \
std::cout << __FILE__ << ':' <<__LINE__ << ": " << x << '\n'; \
} while(0)
#else
#define DEBUGMSG(x) do { } while(0)
#endif
namespace Harp {
// This class serves to handle the strange-precision floating point that can
// crop up in HARP.
class Float {
public:
Float(Word_u bin, Size n): sz(n) {
DEBUGMSG("Float(0x" << std::hex << bin << ", " << std::dec << n << ')');
bool sign(bin >> (n*8 - 1));
Size expSz;
if (n < 4) {
expSz = 5;
} else if (n < 8) {
expSz = 8;
} else {
expSz = 11;
}
Size sigSz = n*8 - expSz - 1;
DEBUGMSG(" exp: " << std::dec << expSz <<
" bits, sig: " << std::dec << sigSz << " bits.");
int exp = (bin >> sigSz) & ((1<<expSz) - 1);
Word_u sig = bin & ((1llu<<sigSz) - 1);
DEBUGMSG(" sig=" << std::dec << sig << " exp=" << exp);
if (exp == 0) {
// Subnormal
d = sig / pow(2, ((1<<(expSz-1))-2)) / pow(2, sigSz);
DEBUGMSG(" Denorm.");
} else if (exp == ((1<<expSz) - 1)) {
// Infinity
d = HUGE_VAL;
DEBUGMSG(" Inf.");
} else {
// Normalized, implied 1.
exp -= (1<<(expSz - 1)) - 1;
d = pow(2.0, exp - int(sigSz)) * double((1ll << sigSz) + sig);
DEBUGMSG(" Norm, exp=" << exp);
}
if (sign) d = -d;
DEBUGMSG("Set to " << d);
}
Float(double d, Size n): sz(n), d(d) { DEBUGMSG("Float(double, size)"); }
operator Word_u() {
DEBUGMSG("Float -> Word_u: " << d);
Size expSz;
if (sz < 4) {
expSz = 5;
} else if (sz < 8) {
expSz = 8;
} else {
expSz = 11;
}
Size sigSz = 8*sz - expSz - 1;
bool sign(d < 0);
bool inf(isinf(d)), zero(d == 0.0);
int exp;
if (!inf && !zero) exp = floor(log2(fabs(d)));
Word_u rval;
if (inf) {
// Infinity
DEBUGMSG(" Inf.");
rval = ((1llu<<expSz)-1llu)<<sigSz;
} else if (!zero && abs(exp) < (1<<(expSz-1)) - 1) {
// Normalized with implied 1.
Word_u sig = (fabs(d) * pow(2.0, -exp) - 1.0) * pow(2.0, sigSz);
DEBUGMSG(" Norm, exp=" << exp << ", sig=" << sig);
rval = ((((exp + ((1llu<<(expSz-1)) - 1llu))
&((1llu<<expSz)-1llu)))<<sigSz) | sig;
} else if (!zero && exp > -(1<<(expSz-1)) - sigSz) {
// Subnormal number.
Word_u sig = round(fabs(d)*pow(2.0,((1<<(expSz-1))-2))*pow(2.0, sigSz));
DEBUGMSG(" Denorm, exp=" << exp << ", sig=" << sig);
rval = sig;
} else {
// Zero.
rval = 0;
}
if (sign) rval |= 1llu<<(sz*8 - 1);
DEBUGMSG(" Returning 0x" << std::hex << rval);
return rval;
}
operator double() { DEBUGMSG("Float->double " << d); return d; }
private:
double d;
Size sz;
};
};

37
emulator/include/help.h Normal file
View File

@@ -0,0 +1,37 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __HELP_H
#define __HELP_H
/* Help messages. */
namespace HarpTools {
namespace Help {
const char *mainHelp =
"--help, -h, no arguments\n"
" Print this message.\n"
"-E, --emu; -A, --asm; -L, --ld; -D, --disasm\n"
" Invoke the emulator, assembler, linker, and disassembler, "
"respectively.\n"
"<mode> --help\n"
" Display contextual help.\n",
*emuHelp = "HARP Emulator command line arguments:\n"
" -c, --core <filename> RAM image\n"
" -a, --arch <arch string> Architecture string\n"
" -s, --stats Print stats on exit.\n"
" -b, --basic Disable virtual memory.\n"
" -i, --batch Disable console input.\n",
*asmHelp = "HARP Assembler command line arguments:\n"
" -a, --arch <arch string>\n"
" -o, --output <filename>\n",
*ldHelp = "HARP Linker command line arguments:\n"
" -o, --output <filename>\n"
" -a, --arch <filename>\n"
" -f, --format <foramt string>\n"
" --offset <bytes>\n",
*disasmHelp = "HARP Disassembler command line arguments:\n"
" -a, --arch <arch string> Architecture string.\n"
" -o, --output <filename> Output filename.\n";
};
};
#endif

View File

@@ -0,0 +1,144 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __INSTRUCTION_H
#define __INSTRUCTION_H
#include <map>
#include <iostream>
#include "types.h"
namespace Harp {
class Warp;
class Ref;
enum Opcode
{
NOP = 0,
R_INST = 51,
L_INST = 3,
I_INST = 19,
S_INST = 35,
B_INST = 99,
LUI_INST = 55,
AUIPC_INST = 23,
JAL_INST = 111,
JALR_INST = 103,
SYS_INST = 115,
TRAP = 0x7f,
FENCE = 0x0f,
PJ_INST = 0x7b,
GPGPU = 0x6b
};
enum InstType { N_TYPE, R_TYPE, I_TYPE, S_TYPE, B_TYPE, U_TYPE, J_TYPE};
// We build a table of instruction information out of this.
struct InstTableEntry_t {
const char *opString;
bool controlFlow, relAddress, allSrcArgs, privileged;
InstType iType;
};
static std::map<int, struct InstTableEntry_t> instTable =
{
{Opcode::NOP, {"nop" , false, false, false, false, InstType::N_TYPE }},
{Opcode::R_INST, {"r_type", false, false, false, false, InstType::R_TYPE }},
{Opcode::L_INST, {"load" , false, false, false, false, InstType::I_TYPE }},
{Opcode::I_INST, {"i_type", false, false, false, false, InstType::I_TYPE }},
{Opcode::S_INST, {"store" , false, false, false, false, InstType::S_TYPE }},
{Opcode::B_INST, {"branch", true , false, false, false, InstType::B_TYPE }},
{Opcode::LUI_INST, {"lui" , false, false, false, false, InstType::U_TYPE }},
{Opcode::AUIPC_INST, {"auipc" , false, false, false, false, InstType::U_TYPE }},
{Opcode::JAL_INST, {"jal" , true , false, false, false, InstType::J_TYPE }},
{Opcode::JALR_INST, {"jalr" , true , false, false, false, InstType::I_TYPE }},
{Opcode::SYS_INST, {"SYS" , true , false, false, false, InstType::I_TYPE }},
{Opcode::TRAP, {"TRAP" , true , false, false, false, InstType::I_TYPE }},
{Opcode::FENCE, {"fence" , true , false, false, false, InstType::I_TYPE }},
{Opcode::PJ_INST, {"pred j", true , false, false, false, InstType::R_TYPE }},
{Opcode::GPGPU, {"gpgpu" , false, false, false, false, InstType::R_TYPE }}
};
static const Size MAX_REG_SOURCES(3);
static const Size MAX_PRED_SOURCES(2);
class Instruction;
struct DivergentBranchException {};
struct DomainException {};
std::ostream &operator<<(std::ostream &, Instruction &);
class Instruction {
public:
Instruction() :
predicated(false), nRsrc(0), nPsrc(0), immsrcPresent(false),
rdestPresent(false), pdestPresent(false), refLiteral(NULL)
{
}
void executeOn(Warp &warp);
friend std::ostream &operator<<(std::ostream &, Instruction &);
/* Setters used to "craft" the instruction. */
void setOpcode (Opcode opc) { op = opc; }
void setPred (RegNum pReg) { predicated = true; pred = pReg; }
void setDestReg (RegNum destReg) { rdestPresent = true; rdest = destReg; }
void setSrcReg (RegNum srcReg) { rsrc[nRsrc++] = srcReg; }
void setFunc3 (Word func3) { this->func3 = func3; }
void setFunc7 (Word func7) { this->func7 = func7; }
void setDestPReg(RegNum dPReg) { pdestPresent = true; pdest = dPReg; }
void setSrcPReg (RegNum srcPReg) { psrc[nPsrc++] = srcPReg; }
Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;}
void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; }
void setImmRef (Ref &r) { refLiteral = &r; }
/* Getters used by encoders. */
Opcode getOpcode() const { return op; }
bool hasPred() const { return predicated; }
RegNum getPred() const { return pred; }
RegNum getNRSrc() const { return nRsrc; }
RegNum getRSrc(RegNum i) const { return rsrc[i]; }
RegNum getNPSrc() const { return nPsrc; }
RegNum getPSrc(RegNum i) const { return psrc[i]; }
bool hasRDest() const { return rdestPresent; }
RegNum getRDest() const { return rdest; }
bool hasPDest() const { return pdestPresent; }
RegNum getPDest() const { return pdest; }
bool hasImm() const { return immsrcPresent; }
Word getImm() const { return immsrc; }
bool hasRefLiteral() const { return refLiteral != NULL; }
Ref *getRefLiteral() const { return refLiteral; }
/* Getters used as table lookup. */
bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; }
private:
bool predicated;
RegNum pred;
Opcode op;
int nRsrc, nPsrc;
RegNum rsrc[MAX_REG_SOURCES], psrc[MAX_PRED_SOURCES];
bool immsrcPresent;
Word immsrc;
Word func3;
Word func7;
bool rdestPresent, pdestPresent;
RegNum rdest, pdest;
Ref *refLiteral;
public:
};
};
#endif
// static struct InstTableEntry {
// const char *opString;
// bool controlFlow, relAddress, allSrcArgs, privileged;
// InstType iType;
// };

432
emulator/include/mem.h Normal file
View File

@@ -0,0 +1,432 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __MEM_H
#define __MEM_H
#include <ostream>
#include <vector>
#include <queue>
#include <map>
#include <pthread.h>
#include "types.h"
namespace Harp {
void *consoleInputThread(void *);
struct BadAddress {};
class MemDevice {
public:
virtual ~MemDevice() {}
virtual Size size() const = 0;
virtual Word read(Addr) = 0;
virtual void write(Addr, Word) = 0;
virtual Byte *base() { return NULL; } /* Null if unavailable. */
};
class RamMemDevice : public MemDevice {
public:
RamMemDevice(Size size, Size wordSize);
RamMemDevice(const char* filename, Size wordSize);
~RamMemDevice() {}
virtual Size size() const { return contents.size(); };
virtual Word read(Addr);
virtual void write(Addr, Word);
virtual Byte *base() { return &contents[0]; }
protected:
Size wordSize;
std::vector<Byte> contents;
};
class RomMemDevice : public RamMemDevice {
public:
RomMemDevice(const char* filename, Size wordSize) :
RamMemDevice(filename, wordSize) {}
RomMemDevice(Size size, Size wordSize) :
RamMemDevice(size, wordSize) {}
~RomMemDevice();
virtual void write(Addr, Word);
};
class Core;
class ConsoleMemDevice : public MemDevice {
public:
ConsoleMemDevice(Size wS, std::ostream &o, Core &core, bool batch = false);
~ConsoleMemDevice() {}
//virtual Size wordSize() const { return wordSize; }
virtual Size size() const { return wordSize; }
virtual Word read(Addr) { pthread_mutex_lock(&cBufLock);
char c = cBuf.front();
cBuf.pop();
pthread_mutex_unlock(&cBufLock);
return Word(c); }
virtual void write(Addr a, Word w) { output << char(w); }
void poll();
friend void *Harp::consoleInputThread(void *);
private:
std::ostream &output;
Size wordSize;
Core &core;
std::queue<char> cBuf;
pthread_mutex_t cBufLock;
};
class DiskControllerMemDevice : public MemDevice {
public:
DiskControllerMemDevice(Size wordSize, Size blockSize, Core &c) :
wordSize(wordSize), blockSize(blockSize), core(c), disks() {}
void addDisk(Byte *file, Size n) { disks.push_back(Disk(file, n)); }
virtual Size size() const { return wordSize * 6; }
virtual Word read(Addr);
virtual void write(Addr, Word);
private:
Word curDisk, curBlock, nBlocks, physAddr, command, status;
enum Status { OK = 0, INVALID_DISK, INVALID_BLOCK };
struct Disk {
Disk(Byte *f, Size n): file(f), blocks(n) {}
Byte *file;
Size blocks;
};
std::vector <Disk> disks;
Core &core;
Size wordSize, blockSize;;
};
class MemoryUnit {
public:
MemoryUnit(Size pageSize, Size addrBytes, bool disableVm = false) :
pageSize(pageSize), addrBytes(addrBytes), ad(), disableVm(disableVm)
{
if (!disableVm)
tlb[0] = TLBEntry(0, 077);
}
void attach(MemDevice &m, Addr base);
//Size wordSize();
struct PageFault {
PageFault(Addr a, bool nf) : faultAddr(a), notFound(nf) {}
Addr faultAddr;
bool notFound;
}; /* Thrown on page fault. */
Word read(Addr, bool sup); /* For data accesses. */
Word fetch(Addr, bool sup); /* For instruction accesses. */
Byte *getPtr(Addr, Size);
void write(Addr, Word, bool sup, Size);
void tlbAdd(Addr virt, Addr phys, Word flags);
void tlbRm(Addr va);
void tlbFlush() { tlb.clear(); }
#ifdef EMU_INSTRUMENTATION
Addr virtToPhys(Addr va);
#endif
private:
class ADecoder {
public:
ADecoder() : zeroChild(NULL), oneChild(NULL), range(0) {}
ADecoder(MemDevice &md, Size range) :
zeroChild(NULL), oneChild(NULL), range(range), md(&md) {}
Byte *getPtr(Addr a, Size sz, Size wordSize);
Word read(Addr a, bool sup, Size wordSize);
void write(Addr a, Word w, bool sup, Size wordSize);
void map(Addr a, MemDevice &md, Size range, Size bit);
private:
MemDevice &doLookup(Addr a, Size &bit);
ADecoder *zeroChild, *oneChild;
MemDevice *md;
Size range;
};
ADecoder ad;
struct TLBEntry {
TLBEntry() {}
TLBEntry(Word pfn, Word flags): pfn(pfn), flags(flags) {}
Word flags;
Word pfn;
};
std::map<Addr, TLBEntry> tlb;
TLBEntry tlbLookup(Addr vAddr, Word flagMask);
Size pageSize, addrBytes;
bool disableVm;
};
class RAM : public MemDevice {
public:
uint8_t* mem[1 << 12];
RAM(){
for(uint32_t i = 0;i < (1 << 12);i++) mem[i] = NULL;
}
~RAM(){
for(uint32_t i = 0;i < (1 << 12);i++) if(mem[i]) delete [] mem[i];
}
void clear(){
for(uint32_t i = 0;i < (1 << 12);i++)
{
if(mem[i])
{
delete mem[i];
mem[i] = NULL;
}
}
}
uint8_t* get(uint32_t address){
if(mem[address >> 20] == NULL) {
uint8_t* ptr = new uint8_t[1024*1024];
for(uint32_t i = 0;i < 1024*1024;i+=4) {
ptr[i + 0] = 0xaa;
ptr[i + 1] = 0xbb;
ptr[i + 2] = 0xcc;
ptr[i + 3] = 0xdd;
}
mem[address >> 20] = ptr;
}
return &mem[address >> 20][address & 0xFFFFF];
}
void read(uint32_t address,uint32_t length, uint8_t *data){
for(unsigned i = 0;i < length;i++){
data[i] = (*this)[address + i];
}
}
void write(uint32_t address,uint32_t length, uint8_t *data){
for(unsigned i = 0;i < length;i++){
(*this)[address + i] = data[i];
}
}
virtual Size size() const { return (1<<31); };
void getBlock(uint32_t address, uint8_t *data)
{
uint32_t block_number = address & 0xffffff00; // To zero out block offset
uint32_t bytes_num = 256;
this->read(block_number, bytes_num, data);
}
void getWord(uint32_t address, uint32_t * data)
{
data[0] = 0;
uint8_t first = *get(address + 0);
uint8_t second = *get(address + 1);
uint8_t third = *get(address + 2);
uint8_t fourth = *get(address + 3);
// std::cout << std::hex;
// std::cout << "RAM: READING ADDRESS " << address + 0 << " DATA: " << (uint32_t) first << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 1 << " DATA: " << (uint32_t) second << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 2 << " DATA: " << (uint32_t) third << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 3 << " DATA: " << (uint32_t) fourth << "\n";
data[0] = (data[0] << 0) | fourth;
data[0] = (data[0] << 8) | third;
data[0] = (data[0] << 8) | second;
data[0] = (data[0] << 8) | first;
// data[0] = (data[0] << 0) | first;
// data[0] = (data[0] << 8) | second;
// data[0] = (data[0] << 8) | third;
// data[0] = (data[0] << 8) | fourth;
// std::cout << "FINAL DATA: " << data[0] << "\n";
}
void writeWord(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
for (int i = 0; i < 4; i++)
{
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
(*this)[address + i] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
}
void writeHalf(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
for (int i = 0; i < 2; i++)
{
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
(*this)[address + i] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
}
void writeByte(uint32_t address, uint32_t * data)
{
uint32_t data_to_write = *data;
uint32_t byte_mask = 0xFF;
(*this)[address] = data_to_write & byte_mask;
data_to_write = data_to_write >> 8;
}
uint8_t& operator [](uint32_t address) {
return *get(address);
}
virtual void write(Addr addr, Word w)
{
uint32_t word = (uint32_t) w;
writeWord(addr, &word);
}
virtual Word read(Addr addr)
{
uint32_t w;
getWord(addr, &w);
// std::cout << "RAM: read -> " << w << " at addr: " << addr << "\n";
return (Word) w;
}
virtual Byte *base()
{
return (Byte *) this->get(0);
}
// MEMORY UTILS
uint32_t hti_old(char c) {
if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
return c - '0';
}
uint32_t hToI_old(char *c, uint32_t size) {
uint32_t value = 0;
for (uint32_t i = 0; i < size; i++) {
value += hti_old(c[i]) << ((size - i - 1) * 4);
}
return value;
}
void loadHexImpl(std::string path) {
this->clear();
FILE *fp = fopen(&path[0], "r");
if(fp == 0){
std::cout << path << " not found" << std::endl;
}
//Preload 0x0 <-> 0x80000000 jumps
((uint32_t*)this->get(0))[0] = 0xf1401073;
((uint32_t*)this->get(0))[1] = 0xf1401073;
// ((uint32_t*)this->get(0))[1] = 0xf1401073;
((uint32_t*)this->get(0))[2] = 0x30101073;
((uint32_t*)this->get(0))[3] = 0x800000b7;
((uint32_t*)this->get(0))[4] = 0x000080e7;
((uint32_t*)this->get(0x80000000))[0] = 0x00000097;
((uint32_t*)this->get(0xb0000000))[0] = 0x01C02023;
// F00FFF10
((uint32_t*)this->get(0xf00fff10))[0] = 0x12345678;
fseek(fp, 0, SEEK_END);
uint32_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char* content = new char[size];
int x = fread(content, 1, size, fp);
if (!x) { std::cout << "COULD NOT READ FILE\n"; exit(1);}
int offset = 0;
char* line = content;
// std::cout << "WHTA\n";
while (1) {
if (line[0] == ':') {
uint32_t byteCount = hToI_old(line + 1, 2);
uint32_t nextAddr = hToI_old(line + 3, 4) + offset;
uint32_t key = hToI_old(line + 7, 2);
switch (key) {
case 0:
for (uint32_t i = 0; i < byteCount; i++) {
unsigned add = nextAddr + i;
*(this->get(add)) = hToI_old(line + 9 + i * 2, 2);
// std::cout << "lhi: Address: " << std::hex <<(add) << "\tValue: " << std::hex << hToI_old(line + 9 + i * 2, 2) << std::endl;
}
break;
case 2:
// cout << offset << endl;
offset = hToI_old(line + 9, 4) << 4;
break;
case 4:
// cout << offset << endl;
offset = hToI_old(line + 9, 4) << 16;
break;
default:
// cout << "??? " << key << endl;
break;
}
}
while (*line != '\n' && size != 0) {
line++;
size--;
}
if (size <= 1)
break;
line++;
size--;
}
if (content) delete[] content;
}
};
};
#endif

210
emulator/include/obj.h Normal file
View File

@@ -0,0 +1,210 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __OBJ_H
#define __OBJ_H
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <stdlib.h>
#include "types.h"
#include "archdef.h"
#include "instruction.h"
#include "enc.h"
#include "asm-tokens.h"
namespace Harp {
class Decoder;
class Encoder;
class Ref {
public:
std::string name;
Ref(const std::string &n, bool r, Size ib = 0):
name(n), bound(false), relative(r), ibase(ib) { }
virtual ~Ref() { }
virtual void bind(Addr addr, Addr base = 0) = 0;
virtual Addr getAddr() const = 0;
bool bound, relative;
Size ibase;
};
/* Used in not-yet-encoded code objects, plain old data. */
class SimpleRef : public Ref {
public:
SimpleRef(const std::string &name, Addr &addr, bool rel = false) :
Ref(name, rel), addr(addr) { }
virtual void bind(Addr addr, Addr base = 0) {
std::cout << "Attempted to bind a SimpleRef.\n";
exit(1);
}
virtual Addr getAddr() const { return this->addr; }
Byte *getAddrPtr() { return (Byte*)&addr; }
private:
Addr &addr;
};
// /* Used in already-encoded code objects. */
// class OffsetRef : public Ref {
// public:
// OffsetRef(
// const std::string &name, std::vector<Byte> &v, Size offset, Size bits,
// Size ws, bool rel = false, Size ibase = 0
// ) : Ref(name, rel, ibase), data(v), offset(offset), bits(bits), wordSize(ws)
// {}
// virtual void bind(Addr addr, Addr base = 0) {
// Size bytes(bits/8), remainder(bits%8);
// if (relative) {
// addr = addr - base;
// Word_s addr_s(addr);
// if ((addr_s >> bits) != ~0ull && (addr_s >> bits) != 0) goto noFit;
// } else {
// Addr mask = (1ull<<bits)-1;
// if (addr > mask) goto noFit;
// }
// { Byte mask((1ull<<remainder) - 1);
// Size i;
// for (i = 0; i < bytes; i++) {
// data[offset+i] = addr & 0xff;
// addr >>= 8;
// }
// data[offset+i] &= ~mask;
// data[offset+i] |= (addr&mask);
// bound = true;
// }
// return;
// noFit:
// std::cout << "Attempt to bind a " << bits << "-bit "
// << (relative?"":"non-") << "relative symbol to an address"
// " it cannot reach.\n";
// exit(1);
// }
// virtual Addr getAddr() const {
// Size bytes = bits/8, remainder = bits%8;
// Byte mask((1<<remainder)-1);
// Addr a(data[offset]&mask);
// for (Size i = 0; i < bytes-1; i++) {
// a |= data[offset + bytes - i - 1];
// a <<= 8;
// }
// return a;
// }
// Size getOffset() const { return offset; }
// Size getBits() const { return bits; }
// private:
// std::vector<Byte> &data;
// Size offset, bits, wordSize;
// };
// class Chunk {
// public:
// Chunk(std::string n, Size a = 0, Word f = 0) :
// name(n), alignment(a), bound(false), flags(f), global(false) {}
// virtual ~Chunk() { for (Size i = 0; i < refs.size(); i++) delete refs[i]; }
// void bind(Addr a) { address = a; bound = true; }
// void setGlobal() { global = true; }
// bool isGlobal() const { return global; }
// std::string name;
// Size alignment;
// bool bound, global;
// Addr address;
// Word flags;
// std::vector<Ref*> refs;
// };
// class TextChunk : public Chunk {
// public:
// TextChunk(std::string n, Size a = 0, Word f = 0)
// : Chunk(n, a, f), instructions() {}
// ~TextChunk() {
// for (Size i = 0; i < instructions.size(); i++) delete instructions[i];
// }
// std::vector<Instruction*> instructions;
// };
// class DataChunk : public Chunk {
// public:
// DataChunk(std::string n, Size a = 0, Word f = 0)
// : Chunk(n, a, f), size(0), contents() {}
// Size size;
// std::vector<Byte> contents; /* 0 to size bytes in length. */
// };
// class Obj {
// public:
// ~Obj() { for (Size i = 0; i < chunks.size(); i++) delete chunks[i]; }
// std::vector<Chunk*> chunks;
// Size entry;
// };
// class DynObj : public Obj {
// public:
// std::vector<std::string> deps;
// };
// class ObjReader {
// public:
// virtual Obj *read(std::istream &input) = 0;
// private:
// };
// class ObjWriter {
// public:
// virtual void write(std::ostream &output, const Obj &o) = 0;
// private:
// };
// class AsmReader : public ObjReader {
// public:
// AsmReader(ArchDef arch) :
// wordSize(arch.getWordSize()), nRegs(arch.getNRegs()) {}
// virtual Obj *read(std::istream &input);
// private:
// Size wordSize, nRegs;
// // Operand type sequences indexed by argument class
// enum ArgType {AT_END, AT_REG, AT_PREG, AT_LIT};
// static ArgType operandtype_table[][4]; // ArgClass -> ArgType[arg_idx]
// };
// class HOFReader : public ObjReader {
// public:
// HOFReader(ArchDef &arch) : arch(arch) {}
// Obj *read(std::istream &input);
// private:
// const ArchDef &arch;
// };
// class AsmWriter : public ObjWriter {
// public:
// AsmWriter(ArchDef arch): wordSize(arch.getWordSize()) {}
// virtual void write(std::ostream &output, const Obj &obj);
// private:
// Size wordSize;
// };
// class HOFWriter : public ObjWriter {
// public:
// HOFWriter(ArchDef &arch) : arch(arch) {}
// virtual void write(std::ostream &output, const Obj &obj);
// private:
// const ArchDef &arch;
// };
};
#endif

View File

@@ -0,0 +1,169 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef EMU_INSTRUMENTATION
#define EMU_INSTRUMENTATION
#endif
#ifndef __QSIM_HARP_H
#define __QSIM_HARP_H
#include "types.h"
#include "core.h"
#include "enc.h"
#include "instruction.h"
#include "mem.h"
#include "obj.h"
#include "archdef.h"
#include <stdint.h>
#include <iostream>
#include <vector>
#include <string>
#include <qsim.h>
namespace Harp {
class OSDomain {
public:
OSDomain(Harp::ArchDef &arch, std::string imgFile);
bool idle(unsigned i) const { return cpus[i].idle(); }
int get_tid(unsigned i) const { return cpus[i].get_tid(); }
bool get_prot(unsigned i) const { return cpus[i].get_prot(); }
int get_n() const { return cpus.size(); }
uint64_t run(unsigned i, uint64_t n) { return cpus[i].run(n); }
void connect_console(std::ostream &s);
void timer_interrupt() { /* TODO: timer convention */ }
void interrupt(unsigned i, int vec) { cpus[i].interrupt(vec); }
bool booted(unsigned i) const { return cpus[i].booted(); }
void save_state(const char* state_file);
template <typename T>
void set_atomic_cb
(T *p, typename Qsim::OSDomain::atomic_cb_obj<T>::atomic_cb_t f)
{
atomic_cbs.push_back(new Qsim::OSDomain::atomic_cb_obj<T>(p, f));
}
template <typename T>
void set_inst_cb
(T* p, typename Qsim::OSDomain::inst_cb_obj<T>::inst_cb_t f)
{
inst_cbs.push_back(new Qsim::OSDomain::inst_cb_obj<T>(p, f));
}
template <typename T>
void set_int_cb
(T *p, typename Qsim::OSDomain::int_cb_obj<T>::int_cb_t f)
{
int_cbs.push_back(new Qsim::OSDomain::int_cb_obj<T>(p, f));
}
template <typename T>
void set_mem_cb
(T *p, typename Qsim::OSDomain::mem_cb_obj<T>::mem_cb_t f)
{
mem_cbs.push_back(new Qsim::OSDomain::mem_cb_obj<T>(p, f));
}
template <typename T>
void set_magic_cb
(T *p, typename Qsim::OSDomain::magic_cb_obj<T>::magic_cb_t f)
{
magic_cbs.push_back(new Qsim::OSDomain::magic_cb_obj<T>(p, f));
}
template <typename T>
void set_io_cb
(T *p, typename Qsim::OSDomain::io_cb_obj<T>::io_cb_t f)
{ /* Do nothing. We have no separate IO address space. */ }
template <typename T>
void set_reg_cb
(T *p, typename Qsim::OSDomain::reg_cb_obj<T>::reg_cb_t f)
{
reg_cbs.push_back(new Qsim::OSDomain::reg_cb_obj<T>(p, f));
}
template <typename T> void mem_rd(T& d, uint64_t paddr);
template <typename T> void mem_rd_virt(unsigned i, T& d, uint64_t vaddr);
template <typename T> void mem_wr(T& d, uint64_t paddr);
template <typename T> void mem_wr_virt(unsigned i, T& d, uint64_t vaddr);
static OSDomain *osDomain;
bool do_atomic(unsigned c) {
bool rval(false);
for (unsigned i = 0; i < atomic_cbs.size(); ++i)
if ((*atomic_cbs[i])(c)) rval = true;
return rval;
}
void do_inst(unsigned c, uint64_t va, uint64_t pa, uint8_t l,
const uint8_t *b, enum inst_type t)
{
for (unsigned i = 0; i < inst_cbs.size(); ++i)
(*inst_cbs[i])(c, va, pa, l, b, t);
}
void do_int(unsigned c, int v) {
for (unsigned i = 0; i < int_cbs.size(); ++i)
(*int_cbs[i])(c, v);
}
void do_mem(unsigned c, uint64_t va, uint64_t pa, uint8_t s, bool w) {
for (unsigned i = 0; i < mem_cbs.size(); ++i)
(*mem_cbs[i])(c, va, pa, s, w);
}
bool do_magic(unsigned c, uint64_t r0) {
bool rval(false);
for (unsigned i = 0; i < magic_cbs.size(); ++i)
if ((*magic_cbs[i])(c, r0)) rval = true;
return rval;
}
void do_reg(unsigned c, int r, uint8_t s, bool w) {
for (unsigned i = 0; i < reg_cbs.size(); ++i)
(*reg_cbs[i])(c, r, s, w);
}
private:
class Cpu {
public:
Cpu(Harp::OSDomain &osd);
Cpu(): dec(NULL), core(NULL) {}
~Cpu() { if (dec) delete dec; if (core) delete core; }
bool idle() const { return false; }
int get_tid() const { return 0; }
bool get_prot() const { return core->getSupervisorMode(); }
uint64_t run(uint64_t n);
void interrupt(int vec) { core->interrupt(vec); }
bool booted() const { return core->running(); }
Harp::OSDomain *osd;
Harp::Decoder *dec;
Harp::Core *core;
};
Harp::ArchDef arch;
Harp::MemoryUnit mu;
Harp::RamMemDevice ram;
Harp::ConsoleMemDevice *console;
std::vector <Harp::OSDomain::Cpu> cpus;
std::vector <Qsim::OSDomain::atomic_cb_obj_base*> atomic_cbs;
std::vector <Qsim::OSDomain::inst_cb_obj_base*> inst_cbs;
std::vector <Qsim::OSDomain::int_cb_obj_base*> int_cbs;
std::vector <Qsim::OSDomain::mem_cb_obj_base*> mem_cbs;
std::vector <Qsim::OSDomain::magic_cb_obj_base*> magic_cbs;
std::vector <Qsim::OSDomain::reg_cb_obj_base*> reg_cbs;
};
};
#endif

25
emulator/include/types.h Normal file
View File

@@ -0,0 +1,25 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __TYPES_H
#define __TYPES_H
#include <stdint.h>
namespace Harp {
typedef uint8_t Byte;
typedef uint32_t Word;
typedef uint32_t Word_u;
typedef int32_t Word_s;
typedef Word_u Addr;
typedef Word_u Size;
typedef unsigned RegNum;
typedef unsigned ThdNum;
enum MemFlags {RD_USR = 1, WR_USR = 2, EX_USR = 4,
RD_SUP = 8, WR_SUP = 16, EX_SUP = 32};
};
#endif

24
emulator/include/util.h Normal file
View File

@@ -0,0 +1,24 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#ifndef __UTIL_H
#define __UTIL_H
#include <vector>
#include "types.h"
namespace Harp {
Word_u bytesToWord(const Byte *b, Size wordSize);
void wordToBytes(Byte *b, Word_u w, Size wordSize);
Word_u flagsToWord(bool r, bool w, bool x);
void wordToFlags(bool &r, bool &w, bool &x, Word_u f);
class OutOfBytes {};
Byte readByte(const std::vector<Byte> &b, Size &n);
Word_u readWord(const std::vector<Byte> &b, Size &n, Size wordSize);
void writeByte(std::vector<Byte> &p, Size &n, Byte b);
void writeWord(std::vector<Byte> &p, Size &n, Size wordSize, Word w);
};
#endif

804
emulator/instruction.cpp Normal file
View File

@@ -0,0 +1,804 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <iostream>
#include <stdlib.h>
#include "include/instruction.h"
#include "include/obj.h"
#include "include/core.h"
#include "include/harpfloat.h"
#include "include/debug.h"
#ifdef EMU_INSTRUMENTATION
#include "include/qsim-harp.h"
#endif
using namespace Harp;
using namespace std;
/* It is important that this stays consistent with the Harp::Instruction::Opcode
enum. */
ostream &Harp::operator<<(ostream& os, Instruction &inst) {
os << dec;
// if (inst.predicated) {
// os << "@p" << dec << inst.pred << " ? ";
// }
// os << inst.instTable[inst.op].opString << ' ';
// if (inst.rdestPresent) os << "%r" << dec << inst.rdest << ' ';
// if (inst.pdestPresent) os << "@p" << inst.pdest << ' ';
// for (int i = 0; i < inst.nRsrc; i++) {
// os << "%r" << dec << inst.rsrc[i] << ' ';
// }
// for (int i = 0; i < inst.nPsrc; i++) {
// os << "@p" << dec << inst.psrc[i] << ' ';
// }
// if (inst.immsrcPresent) {
// if (inst.refLiteral) os << inst.refLiteral->name;
// else os << "#0x" << hex << inst.immsrc;
// }
os << instTable[inst.op].opString;
os << ';';
return os;
}
bool checkUnanimous(unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
const std::vector<bool> &tm) {
bool same;
unsigned i;
for (i = 0; i < m.size(); ++i) {
if (tm[i]) {
same = m[i][p];
break;
}
}
if (i == m.size()) throw DivergentBranchException();
//std::cout << "same: " << same << " with -> ";
for (; i < m.size(); ++i) {
if (tm[i]) {
//std::cout << " " << (bool(m[i][p]));
if (same != (bool(m[i][p]))) {
//std::cout << " FALSE\n";
return false;
}
}
}
//std::cout << " TRUE\n";
return true;
}
Word signExt(Word w, Size bit, Word mask) {
if (w>>(bit-1)) w |= ~mask;
return w;
}
void Instruction::executeOn(Warp &c) {
D(3, "Begin instruction execute.");
/* If I try to execute a privileged instruction in user mode, throw an
exception 3. */
if (instTable[op].privileged && !c.supervisorMode) {
std::cout << "INTERRUPT SUPERVISOR\n";
c.interrupt(3);
return;
}
// /* Also throw exceptions on non-masked divergent branches. */
// if (instTable[op].controlFlow) {
// Size t, count, active;
// for (t = 0, count = 0, active = 0; t < c.activeThreads; ++t) {
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) ++count;
// if (c.tmask[t]) ++active;
// }
// if (count != 0 && count != active)
// throw DivergentBranchException();
// }
Size nextActiveThreads = c.activeThreads;
Size wordSz = c.core->a.getWordSize();
Word nextPc = c.pc;
c.memAccesses.clear();
// If we have a load, overwriting a register's contents, we have to make sure
// ahead of time it will not fault. Otherwise we may perform an indirect load
// by mistake.
// if (op == L_INST && rdest == rsrc[0]) {
// for (Size t = 0; t < c.activeThreads; t++) {
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) {
// Word memAddr = c.reg[t][rsrc[0]] + immsrc;
// c.core->mem.read(memAddr, c.supervisorMode);
// }
// }
// }
bool sjOnce(true), // Has not yet split or joined once.
pcSet(false); // PC has already been set
for (Size t = 0; t < c.activeThreads; t++) {
vector<Reg<Word> > &reg(c.reg[t]);
vector<Reg<bool> > &pReg(c.pred[t]);
stack<DomStackEntry> &domStack(c.domStack);
//std::cout << std::hex << "opcode: " << op << " func3: " << func3 << "\n";
//if (op == GPGPU) //std::cout << "OPCODE MATCHED GPGPU\n";
// If this thread is masked out, don't execute the instruction, unless it's
// a split or join.
// if (((predicated && !pReg[pred]) || !c.tmask[t]) &&
// op != SPLIT && op != JOIN) continue;
bool split = (op == GPGPU) && (func3 == 2);
bool join = (op == GPGPU) && (func3 == 3);
predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2));
// printf("Predicated: %d, split: %d, join: %d\n",predicated, split, join );
// printf("%d && ((%d) || (%d))\n",(op == GPGPU), (func3 == 7), (func3 == 2) );
// cout << "before " << op << " = " << GPGPU << "\n";
if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join)
{
// cout << "about to continue\n";
continue;
}
// cout << "after\n";
++c.insts;
Word memAddr;
Word shift_by;
Word shamt;
Word temp;
Word data_read;
int op1, op2;
bool m_exten;
// std::cout << "op = " << op << "\n";
// std::cout << "R_INST: " << R_INST << "\n";
switch (op) {
case NOP:
//std::cout << "NOP_INST\n";
break;
case R_INST:
// std::cout << "R_INST\n";
m_exten = func7 & 0x1;
if (m_exten)
{
// std::cout << "FOUND A MUL/DIV\n";
switch (func3)
{
case 0:
// MUL
// cout << "MUL\n";
reg[rdest] = ((int) reg[rsrc[0]]) * ((int) reg[rsrc[1]]);
break;
case 1:
// MULH
{
int64_t first = (int64_t) reg[rsrc[0]];
if (reg[rsrc[0]] & 0x80000000)
{
first = first | 0xFFFFFFFF00000000;
}
int64_t second = (int64_t) reg[rsrc[1]];
if (reg[rsrc[1]] & 0x80000000)
{
second = second | 0xFFFFFFFF00000000;
}
// cout << "mulh: " << std::dec << first << " * " << second;
uint64_t result = first * second;
reg[rdest] = ( result >> 32) & 0xFFFFFFFF;
// cout << " = " << result << " or " << reg[rdest] << "\n";
}
break;
case 2:
// MULHSU
{
int64_t first = (int64_t) reg[rsrc[0]];
if (reg[rsrc[0]] & 0x80000000)
{
first = first | 0xFFFFFFFF00000000;
}
int64_t second = (int64_t) reg[rsrc[1]];
reg[rdest] = (( first * second ) >> 32) & 0xFFFFFFFF;
}
break;
case 3:
// MULHU
{
uint64_t first = (uint64_t) reg[rsrc[0]];
uint64_t second = (uint64_t) reg[rsrc[1]];
// cout << "MULHU\n";
reg[rdest] = (( first * second) >> 32) & 0xFFFFFFFF;
}
break;
case 4:
// DIV
if (reg[rsrc[1]] == 0)
{
reg[rdest] = -1;
break;
}
// cout << "dividing: " << dec << ((int) reg[rsrc[0]]) << " / " << ((int) reg[rsrc[1]]);
reg[rdest] = ( (int) reg[rsrc[0]]) / ( (int) reg[rsrc[1]]);
// cout << " = " << ((int) reg[rdest]) << "\n";
break;
case 5:
// DIVU
if (reg[rsrc[1]] == 0)
{
reg[rdest] = -1;
break;
}
reg[rdest] = ((uint32_t) reg[rsrc[0]]) / ((uint32_t) reg[rsrc[1]]);
break;
case 6:
// REM
if (reg[rsrc[1]] == 0)
{
reg[rdest] = reg[rsrc[0]];
break;
}
reg[rdest] = ((int) reg[rsrc[0]]) % ((int) reg[rsrc[1]]);
break;
case 7:
// REMU
if (reg[rsrc[1]] == 0)
{
reg[rdest] = reg[rsrc[0]];
break;
}
reg[rdest] = ((uint32_t) reg[rsrc[0]]) % ((uint32_t) reg[rsrc[1]]);
break;
default:
cout << "unsupported MUL/DIV instr\n";
exit(1);
}
}
else
{
// std::cout << "NORMAL R-TYPE\n";
switch (func3)
{
case 0:
if (func7)
{
reg[rdest] = reg[rsrc[0]] - reg[rsrc[1]];
reg[rdest].trunc(wordSz);
}
else
{
reg[rdest] = reg[rsrc[0]] + reg[rsrc[1]];
reg[rdest].trunc(wordSz);
}
break;
case 1:
reg[rdest] = reg[rsrc[0]] << reg[rsrc[1]];
reg[rdest].trunc(wordSz);
break;
case 2:
if ( int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 3:
if ( Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 4:
reg[rdest] = reg[rsrc[0]] ^ reg[rsrc[1]];
break;
case 5:
if (func7)
{
reg[rdest] = int(reg[rsrc[0]]) >> int(reg[rsrc[1]]);
reg[rdest].trunc(wordSz);
}
else
{
reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(reg[rsrc[1]]);
reg[rdest].trunc(wordSz);
}
break;
case 6:
reg[rdest] = reg[rsrc[0]] | reg[rsrc[1]];
break;
case 7:
reg[rdest] = reg[rsrc[0]] & reg[rsrc[1]];
break;
default:
cout << "ERROR: UNSUPPORTED R INST\n";
exit(1);
}
}
break;
case L_INST:
//std::cout << "L_INST\n";
memAddr = ((reg[rsrc[0]] + immsrc) & 0xFFFFFFFC);
shift_by = ((reg[rsrc[0]] + immsrc) & 0x00000003) * 8;
data_read = c.core->mem.read(memAddr, c.supervisorMode);
// //std::cout <<std::hex<< "EXECUTE: " << reg[rsrc[0]] << " + " << immsrc << " = " << memAddr << " -> data_read: " << data_read << "\n";
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
#endif
switch (func3)
{
case 0:
// LB
reg[rdest] = signExt((data_read >> shift_by) & 0xFF, 8, 0xFF);
break;
case 1:
// LH
// //std::cout << "shifting by: " << shift_by << " final data: " << ((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF) << "\n";
reg[rdest] = signExt((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF);
break;
case 2:
reg[rdest] = int(data_read & 0xFFFFFFFF);
break;
case 4:
// LBU
reg[rdest] = unsigned((data_read >> shift_by) & 0xFF);
break;
case 5:
reg[rdest] = unsigned((data_read >> shift_by) & 0xFFFF);
break;
default:
cout << "ERROR: UNSUPPORTED L INST\n";
exit(1);
c.memAccesses.push_back(Warp::MemAccess(false, memAddr));
}
break;
case I_INST:
//std::cout << "I_INST\n";
switch (func3)
{
case 0:
// ADDI
reg[rdest] = reg[rsrc[0]] + immsrc;
reg[rdest].trunc(wordSz);
break;
case 2:
// SLTI
if ( int(reg[rsrc[0]]) < int(immsrc))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 3:
// SLTIU
op1 = (unsigned) reg[rsrc[0]];
if ( unsigned(reg[rsrc[0]]) < unsigned(immsrc))
{
reg[rdest] = 1;
}
else
{
reg[rdest] = 0;
}
break;
case 4:
// XORI
reg[rdest] = reg[rsrc[0]] ^ immsrc;
break;
case 6:
// ORI;
reg[rdest] = reg[rsrc[0]] | immsrc;
break;
case 7:
// ANDI
reg[rdest] = reg[rsrc[0]] & immsrc;
break;
case 1:
// SLLI
reg[rdest] = reg[rsrc[0]] << immsrc;
reg[rdest].trunc(wordSz);
break;
case 5:
if ((func7 == 0))
{
// SRLI
// //std::cout << "WTF\n";
bool isNeg = ((0x80000000 & reg[rsrc[0]])) > 0;
Word result = Word_u(reg[rsrc[0]]) >> Word_u(immsrc);
// if (isNeg)
// {
// Word mask = 0x80000000;
// for (int i = 32; i < Word_u(immsrc); i++)
// {
// result |= mask;
// mask = mask >> 1;
// }
// }
reg[rdest] = result;
reg[rdest].trunc(wordSz);
}
else
{
// SRAI
// //std::cout << "WOHOOOOO\n";
op1 = reg[rsrc[0]];
op2 = immsrc;
reg[rdest] = op1 >> op2;
reg[rdest].trunc(wordSz);
}
break;
default:
cout << "ERROR: UNSUPPORTED L INST\n";
exit(1);
}
break;
case S_INST:
//std::cout << "S_INST\n";
++c.stores;
memAddr = reg[rsrc[0]] + immsrc;
// //std::cout << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n";
// //std::cout << "FUNC3: " << func3 << "\n";
if (memAddr == 0x00010000)
{
std::cout << (char) reg[rsrc[1]];
break;
}
switch (func3)
{
case 0:
// //std::cout << "SB\n";
c.core->mem.write(memAddr, reg[rsrc[1]] & 0x000000FF, c.supervisorMode, 1);
break;
case 1:
// //std::cout << "SH\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 2);
break;
case 2:
// //std::cout << std::hex << "SW: about to write: " << reg[rsrc[1]] << " to " << memAddr << "\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 4);
break;
default:
cout << "ERROR: UNSUPPORTED S INST\n";
exit(1);
}
c.memAccesses.push_back(Warp::MemAccess(true, memAddr));
#ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
#endif
break;
case B_INST:
//std::cout << "B_INST\n";
switch (func3)
{
case 0:
// BEQ
if (int(reg[rsrc[0]]) == int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 1:
// BNE
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 4:
// BLT
if (int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 5:
// BGE
if (int(reg[rsrc[0]]) >= int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 6:
// BLTU
if (Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
case 7:
// BGEU
if (Word_u(reg[rsrc[0]]) >= Word_u(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
pcSet = true;
}
break;
}
break;
case LUI_INST:
//std::cout << "LUI_INST\n";
reg[rdest] = (immsrc << 12) & 0xfffff000;
break;
case AUIPC_INST:
//std::cout << "AUIPC_INST\n";
reg[rdest] = ((immsrc << 12) & 0xfffff000) + (c.pc - 4);
break;
case JAL_INST:
//std::cout << "JAL_INST\n";
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
if (!pcSet) //std::cout << "JAL... SETTING PC: " << nextPc << "\n";
if (rdest != 0)
{
reg[rdest] = c.pc;
}
pcSet = true;
break;
case JALR_INST:
//std::cout << "JALR_INST\n";
if (!pcSet) nextPc = reg[rsrc[0]] + immsrc;
if (!pcSet) //std::cout << "JALR... SETTING PC: " << nextPc << "\n";
if (rdest != 0)
{
reg[rdest] = c.pc;
}
pcSet = true;
break;
case SYS_INST:
//std::cout << "SYS_INST\n";
temp = reg[rsrc[0]];
switch (func3)
{
case 1:
// printf("Case 1\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = temp;
break;
case 2:
// printf("Case 2\n");
if (rdest != 0)
{
// printf("Reading from CSR: %d = %d\n", (immsrc & 0x00000FFF), c.csr[immsrc & 0x00000FFF]);
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
// printf("Writing to CSR --> %d = %d\n", immsrc, (temp | c.csr[immsrc & 0x00000FFF]));
c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
break;
case 3:
// printf("Case 3\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = temp & (~c.csr[immsrc & 0x00000FFF]);
break;
case 5:
// printf("Case 5\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = rsrc[0];
break;
case 6:
// printf("Case 6\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = rsrc[0] | c.csr[immsrc & 0x00000FFF];
break;
case 7:
// printf("Case 7\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = rsrc[0] & (~c.csr[immsrc & 0x00000FFF]);
break;
case 0:
if (immsrc < 2)
{
//std::cout << "INTERRUPT ECALL/EBREAK\n";
nextActiveThreads = 0;
c.spawned = false;
// c.interrupt(0);
}
break;
default:
break;
}
break;
case TRAP:
//std::cout << "INTERRUPT TRAP\n";
nextActiveThreads = 0;
c.interrupt(0);
break;
case FENCE:
//std::cout << "FENCE_INST\n";
break;
case PJ_INST:
// pred jump reg
//std::cout << "pred jump... src: " << rsrc[0] << std::hex << " val: " << reg[rsrc[0]] << " dest: " << reg[rsrc[1]] << "\n";
if (reg[rsrc[0]])
{
if (!pcSet) nextPc = reg[rsrc[1]];
pcSet = true;
}
break;
case GPGPU:
//std::cout << "GPGPU\n";
switch(func3)
{
case 0:
// WSPAWN
//std::cout << "WSPAWN\n";
if (sjOnce)
{
sjOnce = false;
D(0, "Spawning a new warp.");
// //std::cout << "SIZE: " << c.core->w.size() << "\n";
for (unsigned i = 0; i < c.core->w.size(); ++i)
{
// std::cout << "SPAWNING WARP\n";
Warp &newWarp(c.core->w[i]);
// //std::cout << "STARTING\n";
if (newWarp.spawned == false) {
// //std::cout << "ABOUT TO START\n";
newWarp.pc = reg[rsrc[0]];
newWarp.reg[0] = reg;
newWarp.csr = c.csr;
newWarp.activeThreads = 1;
newWarp.supervisorMode = false;
newWarp.spawned = true;
break;
}
}
}
break;
case 2:
{
// SPLIT
//std::cout << "SPLIT\n";
if (sjOnce)
{
sjOnce = false;
if (checkUnanimous(pred, c.reg, c.tmask)) {
//std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n";
DomStackEntry e(c.tmask);
e.uni = true;
c.domStack.push(e);
break;
}
DomStackEntry e(pred, c.reg, c.tmask, c.pc);
c.domStack.push(c.tmask);
c.domStack.push(e);
for (unsigned i = 0; i < e.tmask.size(); ++i)
{
c.tmask[i] = !e.tmask[i] && c.tmask[i];
}
}
}
break;
case 3:
// JOIN
//std::cout << "JOIN\n";
if (sjOnce)
{
sjOnce = false;
if (!c.domStack.empty() && c.domStack.top().uni) {
D(2, "Uni branch at join");
c.tmask = c.domStack.top().tmask;
c.domStack.pop();
break;
}
if (!c.domStack.top().fallThrough) {
if (!pcSet) nextPc = c.domStack.top().pc;
pcSet = true;
}
c.tmask = c.domStack.top().tmask;
c.domStack.pop();
}
break;
case 4:
// JMPRT
//std::cout << "JMPRT\n";
nextActiveThreads = 1;
if (!pcSet) nextPc = reg[rsrc[0]];
pcSet = true;
break;
case 5:
// CLONE
//std::cout << "CLONE\n";
// //std::cout << "CLONING REG: " << rsrc[0] << " lane: " << reg[rsrc[0]] << "\n";
c.reg[reg[rsrc[0]]] = reg;
break;
case 6:
// JALRS
//std::cout << "JALRS\n";
nextActiveThreads = reg[rsrc[1]];
reg[rdest] = c.pc;
if (!pcSet) nextPc = reg[rsrc[0]];
pcSet = true;
// //std::cout << "ACTIVE_THREDS: " << rsrc[1] << " val: " << reg[rsrc[1]] << "\n";
// //std::cout << "nextPC: " << rsrc[0] << " val: " << std::hex << reg[rsrc[0]] << "\n";
break;
default:
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";
}
break;
default:
cout << "pc: " << hex << (c.pc) << "\n";
cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush;
exit(1);
}
}
D(3, "End instruction execute.");
c.activeThreads = nextActiveThreads;
// if (nextActiveThreads != 0)
// {
// for (int i = 7; i >= c.activeThreads; i--)
// {
// c.tmask[i] = c.tmask[i] && false;
// }
// }
// //std::cout << "new thread mask: ";
// for (int i = 0; i < c.tmask.size(); ++i) //std::cout << " " << c.tmask[i];
// //std::cout << "\n";
// This way, if pc was set by a side effect (such as interrupt), it will
// retain its new value.
if (pcSet) c.pc = nextPc;
if (nextActiveThreads > c.reg.size()) {
cerr << "Error: attempt to spawn " << nextActiveThreads << " threads. "
<< c.reg.size() << " available.\n";
abort();
}
}

BIN
emulator/libharplib.a Normal file

Binary file not shown.

BIN
emulator/libharplib.so Executable file

Binary file not shown.

284
emulator/mem.cpp Normal file
View File

@@ -0,0 +1,284 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <stdlib.h>
#include <pthread.h>
#include "include/debug.h"
#include "include/types.h"
#include "include/util.h"
#include "include/mem.h"
#include "include/core.h"
using namespace std;
using namespace Harp;
RamMemDevice::RamMemDevice(const char *filename, Size wordSize) :
wordSize(wordSize), contents()
{
ifstream input(filename);
if (!input) {
cout << "Error reading file \"" << filename << "\" into RamMemDevice.\n";
exit(1);
}
do { contents.push_back(input.get()); } while (input);
while (contents.size() % wordSize) contents.push_back(0x00);
}
RamMemDevice::RamMemDevice(Size size, Size wordSize) :
contents(size), wordSize(wordSize) {}
void RomMemDevice::write(Addr, Word) {
cout << "Attempt to write to ROM.\n";
exit(1);
}
Word RamMemDevice::read(Addr addr) {
D(2, "RAM read, addr=0x" << hex << addr);
Word w = readWord(contents, addr, wordSize - addr%wordSize);
return w;
}
void RamMemDevice::write(Addr addr, Word w) {
D(2, "RAM write, addr=0x" << hex << addr);
writeWord(contents, addr, wordSize - addr%wordSize, w);
}
MemDevice &MemoryUnit::ADecoder::doLookup(Addr a, Size &bit) {
if (range == 0 || (a&((1ll<<bit)-1)) >= range) {
ADecoder *p(((a>>bit)&1)?oneChild:zeroChild);
if (p) { bit--; return p->doLookup(a, bit); }
else {cout << "lookup of 0x" << hex << a << " failed.\n";
throw BadAddress();}
} else {
return *md;
}
}
void MemoryUnit::ADecoder::map(Addr a, MemDevice &m, Size r, Size bit)
{
if ((1llu << bit) <= r) {
md = &m;
range = m.size();
} else {
ADecoder *&child(((a>>bit)&1)?oneChild:zeroChild);
if (!child) child = new ADecoder();
child->map(a, m, r, bit-1);
}
}
Byte *MemoryUnit::ADecoder::getPtr(Addr a, Size sz, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
if (a + sz <= m.size()) return m.base() + a;
return NULL;
}
Word MemoryUnit::ADecoder::read(Addr a, bool sup, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
// std::cout << std::hex << "ADecoder::read(Addr " << a << ", sup " << sup << ", wordSize " << wordSize << " -> ";
// std::cout << "Data: " << m.read(a) << "\n";
return m.read(a);
}
void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) {
Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit));
RAM & r = (RAM &) m;
// a &= (2<<bit)-1;
// std::cout << std::hex << "ADecoder::write(Addr " << a << ", w " << w << ", sup " << sup << ", wordSize " << wordSize << "\n";
Word before = m.read(a);
Word new_word = w;
if (a == 0x8000012c)
{
printf("WRITING TO 0x8000012c -> %d\n", w);
}
if (wordSize == 8)
{
r.writeByte(a, &w);
}
else if (wordSize == 16)
{
r.writeHalf(a, &w);
}
else
{
r.writeWord(a, &w);
}
// m.write(a, new_word);
}
Byte *MemoryUnit::getPtr(Addr a, Size s) {
return ad.getPtr(a, s, addrBytes*8);
}
void MemoryUnit::attach(MemDevice &m, Addr base) {
ad.map(base, m, m.size(), addrBytes*8 - 1);
}
MemoryUnit::TLBEntry MemoryUnit::tlbLookup(Addr vAddr, Word flagMask) {
map<Addr, MemoryUnit::TLBEntry>::iterator i;
if ((i = tlb.find(vAddr/pageSize)) != tlb.end()) {
TLBEntry &t = i->second;
if (t.flags & flagMask) return t;
else {
D(2, "Page fault on addr 0x" << hex << vAddr << "(bad flags)");
throw PageFault(vAddr, false);
}
} else {
D(2, "Page fault on addr 0x" << hex << vAddr << "(not in TLB)");
throw PageFault(vAddr, true);
}
}
#ifdef EMU_INSTRUMENTATION
Addr MemoryUnit::virtToPhys(Addr vAddr) {
TLBEntry t = tlbLookup(vAddr, 077);
return t.pfn*pageSize + vAddr%pageSize;
}
#endif
Word MemoryUnit::read(Addr vAddr, bool sup) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?8:1;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
// std::cout << "MU::write: About to read: " << std::hex << pAddr << " = " << (ad.read(pAddr, sup, 8*addrBytes)) << " with " << std::dec << (8*addrBytes) << "\n";
return ad.read(pAddr, sup, 8*addrBytes);
}
Word MemoryUnit::fetch(Addr vAddr, bool sup) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?32:4;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
Word instruction = ad.read(pAddr, sup, 8*addrBytes);
return instruction;
}
void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) {
Addr pAddr;
if (disableVm) {
pAddr = vAddr;
} else {
Word flagMask = sup?16:2;
TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize;
}
// std::cout << "MU::write: About to write: " << std::hex << pAddr << " = " << w << " with " << std::dec << 8*bytes << "\n";
ad.write(pAddr, w, sup, 8*bytes);
// std::cout << std::hex << "reading same address: " << (this->read(vAddr, sup)) << "\n";
}
void MemoryUnit::tlbAdd(Addr virt, Addr phys, Word flags) {
D(1, "tlbAdd(0x" << hex << virt << ", 0x" << phys << ", 0x" << flags << ')');
tlb[virt/pageSize] = TLBEntry(phys/pageSize, flags);
}
void MemoryUnit::tlbRm(Addr va) {
if (tlb.find(va/pageSize) != tlb.end()) tlb.erase(tlb.find(va/pageSize));
}
void *Harp::consoleInputThread(void* arg_vp) {
ConsoleMemDevice *arg = (ConsoleMemDevice *)arg_vp;
char c;
while (cin) {
c = cin.get();
pthread_mutex_lock(&arg->cBufLock);
arg->cBuf.push(c);
pthread_mutex_unlock(&arg->cBufLock);
}
cout << "Console input ended. Exiting.\n";
exit(4);
}
ConsoleMemDevice::ConsoleMemDevice(Size wS, std::ostream &o, Core &core,
bool batch) :
wordSize(wS), output(o), core(core), cBuf()
{
// Create a console input thread if we are running in interactive mode.
if (!batch) {
pthread_t *thread = new pthread_t;
pthread_create(thread, NULL, consoleInputThread, (void*)this);
}
pthread_mutex_init(&cBufLock, NULL);
}
void ConsoleMemDevice::poll() {
pthread_mutex_lock(&cBufLock);
if (!cBuf.empty()) core.interrupt(8);
pthread_mutex_unlock(&cBufLock);
}
Word DiskControllerMemDevice::read(Addr a) {
switch (a/8) {
case 0: return curDisk;
case 1: return curBlock;
case 2: return disks[curDisk].blocks * blockSize;
case 3: return physAddr;
case 4: return command;
case 5: return status;
default:
cout << "Attempt to read invalid disk controller register.\n";
exit(1);
}
}
void DiskControllerMemDevice::write(Addr a, Word w) {
switch (a/8) {
case 0: if (w <= disks.size()) {
curDisk = w;
status = OK;
} else {
status = INVALID_DISK;
}
break;
case 1: if (w < disks[curDisk].blocks) {
curBlock = w;
} else {
status = INVALID_BLOCK;
}
break;
case 2: nBlocks = w >= disks[curDisk].blocks?disks[curDisk].blocks - 1 : w;
status = OK;
break;
case 3: physAddr = w;
status = OK;
break;
case 4: if (w == 0) {
} else {
}
cout << "TODO: Implement disk read and write!\n";
break;
}
}

57
emulator/qsim-harp.cpp Normal file
View File

@@ -0,0 +1,57 @@
/*******************************************************************************
HARPtools by Chad D. Kersey, Summer 2011
*******************************************************************************/
#include "include/qsim-harp.h"
#include <iostream>
#include <string>
using namespace Harp;
using namespace Qsim;
using namespace std;
Harp::OSDomain* Harp::OSDomain::osDomain(NULL);
Harp::OSDomain::OSDomain(ArchDef &archref, string imgFile) :
/* TODO: Move the mu to the Cpu. They're sharing a TLB now! */
arch(archref), mu(4096, arch.getWordSize()),
ram(imgFile.c_str(), arch.getWordSize()),
cpus(0)
{
if (osDomain != NULL) {
cout << "Error: OSDomain is a singleton.";
exit(1);
}
osDomain = this;
std::cout << "Constructing an OSDomain with archref, " << archref.getNPRegs() << '\n';
std::cout << "Pushing back a Cpu in OSDomain constructor.\n";
cpus.push_back(Cpu(*this));
console = new ConsoleMemDevice(arch.getWordSize(), cout, *cpus[0].core);
mu.attach(ram, 0);
mu.attach(*console, 1ll<<(arch.getWordSize()*8 - 1));
}
void Harp::OSDomain::connect_console(std::ostream &s) {
/* For now this does nothing. ConsoleMemDevice is not redirectable. */
std::cout << "in connect_console\n";
}
Harp::OSDomain::Cpu::Cpu(Harp::OSDomain &o) :
/* TODO: This should support non-word decoders! */
osd(&o), dec(new WordDecoder(osd->arch)),
core(new Core(osd->arch, *dec, osd->mu))
{
std::cout << "Constructing a new Cpu.\n";
}
uint64_t Harp::OSDomain::Cpu::run(uint64_t n) {
uint64_t i;
std::cout << "pc=0x" << std::hex << core->pc << ", " << std::dec << sizeof(*core) << '\n';
//osd->console->poll();
for (i = 0; i < n; ++i) core->step();
return i;
}

1
emulator/results.txt Normal file
View File

@@ -0,0 +1 @@
start

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10142814192910EC081441F
:100100000544269422C201469305F0FFB2952EC401
:100110000147B78600009386F6FFBA9636C60148B7
:10012000A167C2973EC8171100001301E1EE05490F
:100130008148CA9846C0054A8549D2994EC2054BA6
:10014000930AF0FFDA9A56C4054CB78B0000938BE4
:10015000FBFFE29B5EC6054DA16CEA9C66C81711C9
:1001600000001301A1EC130EF0FF814DF29D6EC053
:10017000130FF0FF854EFA9E76C29301F0FF930FA6
:10018000F0FF8E9F7EC41304F0FF3782000013023D
:10019000F2FF229212C69305F0FFA164AE9426C826
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146369632C0B78700009387F7FF0547A0
:1001C0003E973AC2B78800009388F8FF1308F0FF03
:1001D000469842C4B78900009389F9FF3789000027
:1001E0001309F9FF4E994AC6B78A0000938AFAFFAD
:1001F000216A569A52C8171100001301A1E5A16B9C
:10020000014B5E9B5AC0A16C054C669C62C2A16DFD
:10021000130DF0FF6E9D6AC4A16E378E0000130EA1
:10022000FEFF769E72C6A16F216F7E9F7AC817155A
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814185010EC00142090276
:1001000012C201443D0422C48144C10426C6814573
:10011000FD052EC817110000130101F00546050664
:1001200032C08546890636C205473D073AC4854731
:10013000C1073EC605487D0842C8171100001301DB
:10014000E1EE9308F0FF850846C01309F0FF0909A6
:100150004AC29309F0FFBD094EC4130AF0FF410AD9
:1001600052C6930AF0FFFD0A56C81711000013018A
:1001700021ED370B0800130BFBFF050B5AC0B70B23
:100180000800938BFBFF890B5EC2370C0800130C31
:10019000FCFF3D0C62C4B70C0800938CFCFFC10C43
:1001A00066C6370D0800130DFDFF7D0D6AC81711D7
:1001B0000000130121EAB70D0800850D6EC0370E4F
:1001C0000800090E72C2B70E0800BD0E76C4370FC4
:1001D0000800410F7AC6B70F0800FD0F7EC817153B
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1410123A020009710000010
:10010000938080F0056123A0200097100000938069
:10011000E0EF216123A0200097100000938040EFC2
:100120007D6123A02000971000009380A0EE017154
:1001300023A02000171500001305C5EC971500003B
:10014000938545EE370610F01306C6F2630CB50032
:10015000544514C2144514C2544114C2144114C26B
:100160004105EDB7370510F0130505F22320050012
:0201700000008D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1500023A0C0009710000062
:10010000938080F0340023A0D000971000009380EB
:10011000E0EF780023A0E00097100000938040EF0C
:100120001C0823A0F000971000009380A0EEE01FB1
:1001300023A08000171500001305C5EC97150000DB
:10014000938545EE370610F01306C6F2630CB50032
:10015000544514C2144514C2544114C2144114C26B
:100160004105EDB7370510F0130505F22320050012
:0201700000008D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181458144ED8C26C0814629
:100100000546758E32C281471307F0FF7D8F3AC4D2
:100110008144378400001304F4FF658C22C6014635
:10012000A165F18D2EC8171100001301E1EE0547FE
:100130008146F98E36C005448547E18F3EC285452C
:100140009304F0FFED8C26C4854637860000130625
:10015000F6FF758E32C6854721677D8F3AC8171125
:1001600000001301A1EC9304F0FF0144658C22C050
:100170001306F0FF8545F18D2EC21307F0FF93069D
:10018000F0FFF98E36C41304F0FFB78700009387A1
:10019000F7FFE18F3EC69305F0FFA164ED8C26C802
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146758E32C0B78700009387F7FF054769
:1001C0007D8F3AC2B78400009384F4FF1304F0FFDC
:1001D000658C22C4378600001306F6FFB785000041
:1001E0009385F5FFF18D2EC6378700001307F7FFC3
:1001F000A166F98E36C8171100001301A1E521642C
:100200008147E18F3EC0A1658544ED8C26C2A16681
:100210001306F0FF758E32C4A167378700001307FD
:10022000F7FF7D8F3AC6A1642164658C22C817153B
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814581892EC00146058A46
:1001000032C28146C18A36C401477D8B3AC68147D7
:10011000859B3EC817110000130101F005440188BA
:1001200022C08544858826C28545C1892EC40546DE
:100130007D8A32C68546859A36C81711000013019C
:10014000E1EE1307F0FF018B3AC09307F0FF858BB8
:100150003EC21304F0FF418822C49304F0FFFD88DF
:1001600026C69305F0FF85992EC8171100001301CC
:1001700021ED370608001306F6FF018A32C0B706E4
:1001800008009386F6FF858A36C2370708001307F2
:10019000F7FF418B3AC4B70708009387F7FFFD8B41
:1001A0003EC6370408001304F4FF059822C817114F
:1001B0000000130121EAB7040800818826C0B705B2
:1001C000080085892EC237060800418A32C4B70666
:1001D0000800FD8A36C637070800059B3AC8171580
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,33 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181479D8F89C7B7270100B7
:100100009387B73A3EC0171100001301E1EF054491
:10011000018C09C4372401001304B43A22C017111A
:1001200000001301A1EEFD54858C89C4B7240100A1
:100130009384B43A26C017110000130161EDB7850E
:1001400000009385F5FF8D8D89C5B7250100938546
:10015000B53A2EC0171100001301C1EB2166118EB4
:1001600009C6372601001306B63A32C0171500003B
:10017000130545E9971500009385C5EA370610F089
:100180001306C6F2630CB500544514C2144514C2DC
:10019000544114C2144114C24105EDB7370510F0A3
:1001A000130505F2232005000000000000000000F8
:0201B00000004D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,30 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814691E2814636C01711BB
:100100000000130161F0054711E301473AC01711E0
:1001100000001301A1EFFD5791E381473EC0171185
:1001200000001301E1EE378400001304F4FF11E036
:10013000014422C0171100001301C1EDA16491E038
:10014000814426C0171500001305C5EB9715000064
:10015000938545ED370610F01306C6F2630CB50023
:10016000544514C2144514C2544114C2144114C25B
:100170004105EDB7370510F0130505F22320050002
:0201800000007D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,32 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814529A0B7250100938556
:10010000B53A2EC017110000130101F0054629A0D1
:10011000372601001306B63A32C01711000013014A
:10012000E1EEFD5629A0B72601009386B63A36C007
:10013000171100001301C1ED378700001307F7FF07
:1001400029A0372701001307B73A3AC0171100005A
:10015000130141ECA16729A0B72701009387B73AA3
:100160003EC0171500001305E5E9971500009385BB
:1001700065EB370610F01306C6F2630CB500544564
:1001800014C2144514C2544114C2144114C241058E
:10019000EDB7370510F0130505F223200500000028
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,32 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101442920372401001304D9
:10010000B43A22C017110000130101F085442920E0
:10011000B72401009384B43A26C0171100001301DC
:10012000E1EEFD552920B72501009385B53A2EC093
:10013000171100001301C1ED378600001306F6FF0A
:100140002920372601001306B63A32C017110000E5
:10015000130141ECA1662920B72601009386B63A27
:1001600036C0171500001305E5E9971500009385C3
:1001700065EB370610F01306C6F2630CB500544564
:1001800014C2144514C2544114C2144114C241058E
:10019000EDB7370510F0130505F223200500000028
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,35 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10145170600001306260137
:100100000296372501001305B53A32C017110000D9
:10011000130181EF0545970600009386260182961C
:10012000372501001305B53A36C017110000130139
:10013000E1ED7D55170700001307270102973725CA
:1001400001001305B53A3AC017110000130141EC44
:10015000378500001305F5FF9707000093872701F7
:100160008297372501001305B53A3EC017110000EC
:10017000130141EA216517080000130828010298BD
:10018000372501001305B53A42C0171500001305C5
:1001900065E7971500009385E5E8370610F013062C
:1001A000C6F2630CB500544514C2144514C2544140
:1001B00014C2144114C24105EDB7370510F0130500
:1001C00005F22320050000000000000000000000F0
:0201D00000002D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,35 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101459701000093812101C6
:100100008281372501001305B53A0EC01711000092
:10011000130181EF0545170200001302220102823C
:10012000372501001305B53A12C01711000013015D
:10013000E1ED7D55170400001304240102843725E6
:1001400001001305B53A22C017110000130141EC5C
:10015000378500001305F5FF970400009384240100
:100160008284372501001305B53A26C01711000017
:10017000130141EA216597050000938525018285D9
:10018000372501001305B53A2EC0171500001305D9
:1001900065E7971500009385E5E8370610F013062C
:1001A000C6F2630CB500544514C2144514C2544140
:1001B00014C2144114C24105EDB7370510F0130500
:1001C00005F22320050000000000000000000000F0
:0201D00000002D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000000000000000000D4
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814181410EC001420542FE
:1001000012C20144414422C48144FD4426C68145B3
:1001100085552EC817110000130101F00546014650
:1001200032C08546854636C2054741473AC48547B1
:10013000FD473EC60548055842C817110000130187
:10014000E1EE9308F0FF814846C01309F0FF05492E
:100150004AC29309F0FFC1494EC4130AF0FF7D4A19
:1001600052C6930AF0FF855A56C8171100001301B2
:1001700021ED370B0800130BFBFF014B5AC0B70BE7
:100180000800938BFBFF854B5EC2370C0800130CF5
:10019000FCFF414C62C4B70C0800938CFCFFFD4C83
:1001A00066C6370D0800130DFDFF055D6AC81711FF
:1001B0000000130121EAB70D0800814D6EC0370E13
:1001C0000800054E72C2B70E0800C14E76C4370F44
:1001D00008007D4F7AC6B70F0800855F7EC81715E7
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814185610EC001420962B6
:1001000012C201443D6422C48144FD6426C6814577
:10011000FD752EC817110000130101F00546056694
:1001200032C08546896636C205473D673AC4854771
:10013000FD673EC605487D7842C8171100001301CF
:10014000E1EE9308F0FF856846C01309F0FF0969E6
:100150004AC29309F0FFBD694EC4130AF0FF7D6ADD
:1001600052C6930AF0FFFD7A56C81711000013011A
:1001700021ED370B0800130BFBFF056B5AC0B70BC3
:100180000800938BFBFF896B5EC2370C0800130CD1
:10019000FCFF3D6C62C4B70C0800938CFCFFFD6C47
:1001A00066C6370D0800130DFDFF7D7D6AC8171167
:1001B0000000130121EAB70D0800856D6EC0370EEF
:1001C0000800096E72C2B70E0800BD6E76C4370F04
:1001D00008007D6F7AC6B70F0800FD7F7EC817152F
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1171700001307E7F118435F
:100100003AC017110000130121F0971700009387E0
:10011000A7F0DC433EC017110000130121EF1714B4
:100120000000130464EF004422C017110000130103
:1001300021EE97140000938424EEE45026C017119A
:100140000000130121ED971600009386E6ECF45EA3
:1001500036C0171500001305E5EA971500009385D2
:1001600065F4370610F01306C6F2630CB50054456B
:1001700014C2144514C2544114C2144114C241059E
:10018000EDB7370510F0130505F223200500000038
:0201900000006D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000100000002000000D1
:1010200003000000040000000500000006000000AE
:101030000700000008000000090000000A0000008E
:101040000B0000000C0000000D0000000E0000006E
:101050000F0000001000000011000000120000004E
:10106000130000001400000015000000160000002E
:101070001700000018000000190000001A0000000E
:101080001B0000001C0000001D0000001E000000EE
:101090001F00000000000000000000000000000031
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,40 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1171100001301E1F102428A
:1001000023A0400097100000938000F0171100001A
:10011000130181F0124423A0800097100000938007
:10012000E0EE17110000130121EF224823A0000187
:10013000971000009380C0ED171100001301C1ED6E
:10014000F65F23A0F001971000009380A0EC171138
:100150000000130161ECFE5A23A0500117150000A6
:10016000130545EA971500009385C5F3370610F08F
:100170001306C6F2630CB500544514C2144514C2EC
:10018000544114C2144114C24105EDB7370510F0B3
:10019000130505F223200500000000000000000008
:0201A00000005D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFF000000000100000002000000D1
:1010200003000000040000000500000006000000AE
:101030000700000008000000090000000A0000008E
:101040000B0000000C0000000D0000000E0000006E
:101050000F0000001000000011000000120000004E
:10106000130000001400000015000000160000002E
:101070001700000018000000190000001A0000000E
:101080001B0000001C0000001D0000001E000000EE
:101090001F00000000000000000000000000000031
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101468145B2852EC0014760
:100100008546BA8636C201449307F0FFA2873EC4F3
:100110008145B78400009384F4FFAE8426C68146EF
:100120002166368632C8171100001301E1EE8547BB
:1001300001473E873AC085440544268422C20546CD
:100140009305F0FFB2852EC40547B786000093865D
:10015000F6FFBA8636C60544A167A2873EC81711C6
:1001600000001301A1EC9305F0FF8144AE8426C08A
:100170009306F0FF0546368632C29307F0FF130759
:10018000F0FF3E873AC49304F0FF37840000130465
:10019000F4FF268422C61306F0FFA165B2852EC89F
:1001A000171100001301C1E9378700001307F7FF9B
:1001B0008146BA8636C0378400001304F4FF8547B1
:1001C000A2873EC2B78500009385F5FF9304F0FF38
:1001D000AE8426C4B78600009386F6FF37860000FB
:1001E0001306F6FF368632C6B78700009387F7FFFF
:1001F00021673E873AC8171100001301A1E5A164E9
:100200000144268422C021668545B2852EC221671D
:100210009306F0FFBA8636C42164B787000093873F
:10022000F7FFA2873EC6A165A164AE8426C8171554
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F101448147C18F3EC08145B9
:100100008544CD8C26C281461306F0FF558E32C43D
:100110008147378700001307F7FF5D8F3AC6814498
:100120002164458C22C8171100001301E1EE054639
:100130008145D18D2EC005478546D98E36C20544EE
:100140009307F0FFC18F3EC48545B78400009384B8
:10015000F4FFCD8C26C685462166558E32C8171110
:1001600000001301A1EC9307F0FF01475D8F3AC037
:100170009304F0FF0544458C22C21306F0FF93055B
:10018000F0FFD18D2EC41307F0FFB78600009386D1
:10019000F6FFD98E36C61304F0FFA167C18F3EC8A3
:1001A000171100001301C1E9B78500009385F5FF21
:1001B0008144CD8C26C0B78600009386F6FF0546A5
:1001C000558E32C2B78700009387F7FF1307F0FF01
:1001D0005D8F3AC4B78400009384F4FF3784000035
:1001E0001304F4FF458C22C6378600001306F6FF81
:1001F000A165D18D2EC8171100001301A1E521675B
:100200008146D98E36C021648547C18F3EC2A16523
:100210009304F0FFCD8C26C4A16637860000130638
:10022000F6FF558E32C6A16721675D8F3AC8171554
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814186010EC001420A0274
:1001000012C201443E0422C48144C20426C6814571
:10011000FE052EC817110000130101F00546060662
:1001200032C085468A0636C205473E073AC485472F
:10013000C2073EC605487E0842C8171100001301D9
:10014000E1EE9308F0FF860846C01309F0FF0A09A4
:100150004AC29309F0FFBE094EC4130AF0FF420AD7
:1001600052C6930AF0FFFE0A56C817110000130189
:1001700021ED370B0800130BFBFF060B5AC0B70B22
:100180000800938BFBFF8A0B5EC2370C0800130C30
:10019000FCFF3E0C62C4B70C0800938CFCFFC20C41
:1001A00066C6370D0800130DFDFF7E0D6AC81711D6
:1001B0000000130121EAB70D0800860D6EC0370E4E
:1001C00008000A0E72C2B70E0800BE0E76C4370FC2
:1001D0000800420F7AC6B70F0800FE0F7EC8171539
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F18144858426C08145898552
:100100002EC201463D8632C48146C18636C60147AD
:100110007D873AC817110000130101F085478587D4
:100120003EC00544098422C28544BD8426C4854559
:10013000C1852EC605467D8632C817110000130101
:10014000E1EE9306F0FF858636C01307F0FF0987BE
:100150003AC29307F0FFBD873EC41304F0FF418409
:1001600022C69304F0FFFD8426C817110000130176
:1001700021EDB70508009385F5FF85852EC037066C
:1001800008001306F6FF098632C2B70608009386F8
:10019000F6FFBD8636C4370708001307F7FF41870F
:1001A0003AC6B70708009387F7FFFD873EC81711C7
:1001B0000000130121EA37040800058422C0B704B7
:1001C0000800898426C2B7050800BD852EC43706FD
:1001D0000800418632C6B7060800FD8636C81715E6
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1014705833AC0814789833C
:100100003EC201443D8022C48144C18026C681454F
:10011000FD812EC817110000130101F0054605826C
:1001200032C08546898236C205473D833AC4854739
:10013000C1833EC605447D8022C81711000013010B
:10014000E1EE9304F0FF858026C09305F0FF8981DE
:100150002EC21306F0FF3D8232C49306F0FFC18227
:1001600036C61307F0FF7D833AC81711000013014C
:1001700021EDB70708009387F7FF85833EC037045A
:1001800008001304F4FF098022C2B7040800938416
:10019000F4FFBD8026C4B70508009385F5FFC18133
:1001A0002EC6370608001306F6FF7D8232C81711E7
:1001B0000000130121EAB7060800858236C0370720
:1001C000080009833AC2B7070800BD833EC437045C
:1001D0000800418022C6B7040800FD8026C8171514
:1001E0000000130525E2971500009385A5E8370662
:1001F00010F01306C6F2630CB500544514C2144542
:1002000014C2544114C2144114C24105EDB737055C
:1002100010F0130505F22320050000000000000087
:020220000000DC
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F1814581448D8C26C0814689
:100100000546158E32C281471307F0FF1D8F3AC492
:100110008144378400001304F4FF058C22C6014695
:10012000A165918D2EC8171100001301E1EE05475E
:100130008146998E36C005448547818F3EC28545EC
:100140009304F0FF8D8C26C4854637860000130685
:10015000F6FF158E32C6854721671D8F3AC81711E5
:1001600000001301A1EC9304F0FF0144058C22C0B0
:100170001306F0FF8545918D2EC21307F0FF9306FD
:10018000F0FF998E36C41304F0FFB7870000938701
:10019000F7FF818F3EC69305F0FFA1648D8C26C8C2
:1001A000171100001301C1E9B78600009386F6FF1E
:1001B0000146158E32C0B78700009387F7FF0547C9
:1001C0001D8F3AC2B78400009384F4FF1304F0FF3C
:1001D000058C22C4378600001306F6FFB7850000A1
:1001E0009385F5FF918D2EC6378700001307F7FF23
:1001F000A166998E36C8171100001301A1E521648C
:100200008147818F3EC0A16585448D8C26C2A16641
:100210001306F0FF158E32C4A1673787000013075D
:10022000F7FF1D8F3AC6A1642164058C22C81715FB
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,41 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F10144171600001306C6F198
:1001000000C2004222C0171100001301E1EF854434
:1001100097170000938747F0C4C3C44326C0171144
:1001200000001301A1EE7D55971400009384C4EEE6
:1001300088C488442AC017110000130161EDB786F6
:1001400000009386F6FF171700001307E7EC14CBA7
:10015000144B36C0171100001301C1EBA16717162D
:100160000000130666EB7CDE7C5E3EC017150000C7
:10017000130545E9971500009385C5F2370610F081
:100180001306C6F2630CB500544514C2144514C2DC
:10019000544114C2144114C24105EDB7370510F0A3
:1001A000130505F2232005000000000000000000F8
:0201B00000004D
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFF00000000000000000000000054
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,41 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E0000100010001000100010001000100971062
:1000F0000000938020F1171100001301E1F181410C
:100100000EC0824123A03000971000009380C0EF02
:1001100017110000130141F0054212C2124223A040
:10012000400097100000938060EE1711000013014B
:10013000A1EE7D58C2C0064823A000019710000020
:10014000938000ED17110000130101ED378C0000C2
:10015000130CFCFFE2DC665C23A08001971000001A
:10016000938040EB17110000130101EBA16FFEDF3C
:10017000FE5F23A0F001171500001305A5E89715F1
:100180000000938525F2370610F01306C6F2630CC3
:10019000B500544514C2144514C2544114C214414C
:1001A00014C24105EDB7370510F0130505F2232001
:0201B000050048
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFF00000000000000000000000054
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:1000000001000100010001000100010001000100E8
:1000100001000100010001000100010001000100D8
:1000200001000100010001000100010001000100C8
:1000300001000100010001000100010001000100B8
:1000400001000100010001000100010001000100A8
:100050000100010001000100010001000100010098
:100060000100010001000100010001000100010088
:100070000100010001000100010001000100010078
:100080000100010001000100010001000100010068
:100090000100010001000100010001000100010058
:1000A0000100010001000100010001000100010048
:1000B0000100010001000100010001000100010038
:1000C0000100010001000100010001000100010028
:1000D0000100010001000100010001000100010018
:1000E00001000100010001000100010001001711E1
:1000F0000000130121F181440144258C22C00146F6
:100100008545B18D2EC201479306F0FFB98E36C4E6
:100110000144B78700009387F7FFA18F3EC6814552
:10012000A164AD8C26C8171100001301E1EE8546CD
:100130000146358E32C0854705473D8F3AC285441A
:100140001304F0FF258C22C40546B7850000938573
:10015000F5FFB18D2EC60547A166B98E36C81711B9
:1001600000001301A1EC1304F0FF8147A18F3EC0F2
:100170009305F0FF8544AD8C26C29306F0FF13066D
:10018000F0FF358E32C49307F0FF37870000130766
:10019000F7FF3D8F3AC69304F0FF2164258C22C8F7
:1001A000171100001301C1E9378600001306F6FF9E
:1001B0008145B18D2EC0378700001307F7FF8546B4
:1001C000B98E36C2378400001304F4FF9307F0FFA2
:1001D000A18F3EC4B78500009385F5FFB78400006A
:1001E0009384F4FFAD8C26C6B78600009386F6FF95
:1001F0002166358E32C8171100001301A1E5A167F1
:1002000001473D8F3AC0A1640544258C22C2216676
:100210009305F0FFB18D2EC42167B7860000938649
:10022000F6FFB98E36C62164A167A18F3EC81715A7
:100230000000130525DD971500009385A5E337061B
:1002400010F01306C6F2630CB500544514C21445F1
:1002500014C2544114C2144114C24105EDB737050C
:1002600010F0130505F22320050000000000000037
:0202700000008C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFF00000000000000000000000084
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,52 @@
:0200000480007A
:1000000017110000130101001309000093080000FC
:10001000B348190323201101130A000093091000AB
:10002000B3493A0323223101130B0000930AF0FF76
:10003000B34A5B0323245101130C0000B70B00806B
:10004000938BFBFFB34B7C0323267101130D000040
:10005000B70C0080B34C9D032328910117110000B9
:10006000130181FB130E1000930D0000B34DBE036E
:100070002320B101130F1000930E1000B34EDF03C5
:100080002322D10193011000930FF0FFB3CFF103AE
:100090002324F10113041000370200801302F2FF41
:1000A000334244022326410093051000B704008028
:1000B000B3C495022328910017110000130101F722
:1000C0009306F0FF1306000033C6C6022320C100CA
:1000D0009307F0FF1307100033C7E7022322E10064
:1000E0009308F0FF1308F0FF33C80803232401012D
:1000F0009309F0FF370900801309F9FF33C9290379
:1001000023262101930AF0FF370A008033CA4A03ED
:100110002328410117110000130181F2B70B008061
:10012000938BFBFF130B000033CB6B032320610188
:10013000B70C0080938CFCFF130C100033CC8C03A5
:1001400023228101B70D0080938DFDFF130DF0FF79
:1001500033CDAD032324A101B70E0080938EFEFFA3
:10016000370E0080130EFEFF33CECE032326C101CF
:10017000B70F0080938FFFFF370F008033CFEF035F
:100180002328E101171100001301C1EC37020080A0
:1001900093010000B341320223203100B7040080F4
:1001A0001304100033C48402232281003706008028
:1001B0009305F0FFB345B6022324B1003707008052
:1001C000B70600809386F6FFB346D7022326D100F8
:1001D00037080080B7070080B347F8022328F100F2
:1001E00017150000130505E297150000938585EEAD
:1001F000370610F01306C6F26306B5028326C50063
:100200002320D600832685002320D60083264500A0
:100210002320D600832605002320D60013050501E0
:100220006FF09FFD370510F0130505F22320050040
:0402300000000000CA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFF000000000000000028
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,52 @@
:0200000480007A
:1000000017110000130101001309000093080000FC
:10001000B358190323201101130A0000930910009B
:10002000B3593A0323223101130B0000930AF0FF66
:10003000B35A5B0323245101130C0000B70B00805B
:10004000938BFBFFB35B7C0323267101130D000030
:10005000B70C0080B35C9D032328910117110000A9
:10006000130181FB130E1000930D0000B35DBE035E
:100070002320B101130F1000930E1000B35EDF03B5
:100080002322D10193011000930FF0FFB3DFF1039E
:100090002324F10113041000370200801302F2FF41
:1000A000335244022326410093051000B704008018
:1000B000B3D495022328910017110000130101F712
:1000C0009306F0FF1306000033D6C6022320C100BA
:1000D0009307F0FF1307100033D7E7022322E10054
:1000E0009308F0FF1308F0FF33D80803232401011D
:1000F0009309F0FF370900801309F9FF33D9290369
:1001000023262101930AF0FF370A008033DA4A03DD
:100110002328410117110000130181F2B70B008061
:10012000938BFBFF130B000033DB6B032320610178
:10013000B70C0080938CFCFF130C100033DC8C0395
:1001400023228101B70D0080938DFDFF130DF0FF79
:1001500033DDAD032324A101B70E0080938EFEFF93
:10016000370E0080130EFEFF33DECE032326C101BF
:10017000B70F0080938FFFFF370F008033DFEF034F
:100180002328E101171100001301C1EC37020080A0
:1001900093010000B351320223203100B7040080E4
:1001A0001304100033D48402232281003706008018
:1001B0009305F0FFB355B6022324B1003707008042
:1001C000B70600809386F6FFB356D7022326D100E8
:1001D00037080080B7070080B357F8022328F100E2
:1001E00017150000130505E297150000938585EEAD
:1001F000370610F01306C6F26306B5028326C50063
:100200002320D600832685002320D60083264500A0
:100210002320D600832605002320D60013050501E0
:100220006FF09FFD370510F0130505F22320050040
:0402300000000000CA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFF000000000000000028
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,65 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033824100DD
:10003000B382510033836100B38371003384810044
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B30494003305A400B305B400A0
:100090003306C400B306D40023208100232291003C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF370900803387E6006F
:1000E000B387F60033880601B388160133892601E9
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3093901330A4901B30A5901E9
:10014000330B6901B30B79012320210123223101F3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E0080338C8B01FF
:10019000B38C9B01338DAB01B38DBB01338ECB018F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00930D1000F3
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
:1001E0003381B001B301B1012320BD012322CD0130
:1001F0002324DD012326ED012328FD01232A1D00F0
:10020000232C2D00232E3D0097100000938000E149
:1002100017110000130181EB03AE0000B79DFFF73B
:10022000938D8D813300BE012320010097100000C3
:10023000938000DF17110000130181E903AE000075
:10024000B79DFFF7938D8D813300BE01B30200008F
:10025000232001002322510097100000938080DCAE
:1002600017110000130141E783A100003382010050
:10027000B30202003303500033070300B307070043
:1002800033880700B30C0001330D9001B30D0D004E
:10029000232041002322A1012324B10117150000CE
:1002A000130545D9971500009385C5E3370610F06F
:1002B0001306C6F26306B5028326C5002320D600C6
:1002C000832685002320D600832645002320D600E0
:1002D000832605002320D600130505016FF09FFD3E
:1002E000370510F0130505F223200500000000007B
:0402F000000000000A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A10000138211009382F17F1383F1FF0B
:1000200093830100138401802320310023224100A7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000930414001305F47F9305F4FF38
:1000600013060400930604802320810023229100BC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A60000138716009387F67F1388F6FF68
:1000A00093880600138906802320D1002322E100D3
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093091900130AF97F930AF9FF95
:1000E000130B0900930B09802320210123223101E6
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB0000138C1B00938CFB7F138DFBFFC4
:10012000938D0B00138E0B802320710123228101FC
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00930E1E00138F1E00930F1F0021
:1001600093801F00138110009301110023A0CD0183
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A200001380120025
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013801200930210000A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A100001382010038
:1001E0009302020013830200130703009307070022
:1001F00013880700930C0800138D0C00930D0D005D
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,66 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033F241006D
:10003000B3F2510033F36100B3F3710033F4810084
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B37494003375A400B375B40050
:100090003376C400B376D40023208100232291005C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF3709008033F7E600FF
:1000E000B3F7F60033F80601B3F8160133F9260129
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3793901337A4901B37A590199
:10014000337B6901B37B7901232021012322310113
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E008033FC8B018F
:10019000B3FC9B0133FDAB01B3FDBB0133FECB01CF
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C001302F00797
:1001D0009302F0031303F0019303F0001304700083
:1001E00093043000B37E4E0033FF5E00B37F6F0098
:1001F000B3F07F0033F18000B371910023204D00F4
:100200002322CD012324DD012326ED012328FD0136
:10021000232A1D00232C2D00232E3D0097100000C3
:100220009380C0DF17110000130141EA03AE000004
:10023000B79DFFF7938D8D813370BE0123200100A0
:10024000971000009380C0DD17110000130141E8F2
:1002500003AE0000B79DFFF7938D8D813370BE0113
:10026000B3720000232001002322510097100000E8
:10027000938040DB17110000130101E683A1000009
:100280009303F0FF33F27100B372720033F3530043
:1002900033777300B377770033F87700B3FC03014B
:1002A00033FD9301B37D7D00232041002322A10172
:1002B0002324B101171500001305C5D797150000B9
:1002C000938545E2370610F01306C6F26306B502C1
:1002D0008326C5002320D600832685002320D60050
:1002E000832645002320D600832605002320D60040
:1002F000130505016FF09FFD370510F0130505F29A
:0403000023200500B1
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFCDAB7856341298BADCFE9A
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013F2110093F2F17F13F3F1FFBB
:1000200093F3010013F401802320310023224100C7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000937414001375F47F9375F4FFE8
:1000600013760400937604802320810023229100DC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A6000013F7160093F7F67F13F8F6FF18
:1000A00093F8060013F906802320D1002322E100F3
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093791900137AF97F937AF9FF45
:1000E000137B0900937B0980232021012322310106
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB000013FC1B0093FCFB7F13FDFBFF74
:1001200093FD0B0013FE0B8023207101232281011C
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00937EFE0713FFFE03937FFF0126
:1001600093F0FF0013F170009371310023A0CD01D3
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A2000013F01200B5
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013F01200937210002A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A1000013F2F1FFD9
:1001E0009372F2FF13F3F2FF1377F3FF9377F7FFA6
:1001F00013F8F7FF937CF8FF13FDFCFF937DFDFFE1
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFCDAB7856341298BADCFE9A
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,42 @@
:0200000480007A
:100000001717000013070700971700009387870151
:10001000832007003711000013014100B7F1FFFFF3
:100020009381810037F2FF7F1302C200B702008084
:100030009382020133812000B3813000338240007B
:10004000B3825000170300009713000017F8FFFF5A
:1000500097FEFF7F970F008033431300B3C3230045
:1000600033483800B3CE4E00B3CF5F0023A0670003
:1000700023A2770023A4070123A6D70123A8F70111
:1000800097180000938848F8171800001308C8FA5A
:10009000B710111193801011372122221301212250
:1000A000B737333393873733374E4444130E4E44B8
:1000B000375F5555130F5F5583A108003702008045
:1000C000B7F2FF7F9382420013038000B713000052
:1000D0009383C30037F4FFFF13040401338241000C
:1000E000B382510033836100B38371003384810094
:1000F0009700008017F1FF7F97070000171E000090
:1001000017FFFFFFB3C0400033415100B3C7670082
:10011000334E7E00334F8F00232018002322280007
:100120002324F8002326C8012328E801171900001A
:100130001309C9ED97180000938848F1832009003E
:10014000032149008321890017020000130242FFA6
:100150009707000093878701170F0000130F0F0404
:10016000970200009382C2FD1708000013080800E0
:10017000970F0000938F8F0233421200B3C72700FE
:10018000334F3F00B382124033482800B3CF3F00C3
:1001900023A0480023A2F80023A4E80123A65800C6
:1001A00023A8080123AAF80117150000130585E705
:1001B00097150000938505EB370610F01306C6F27D
:1001C0006306B5028326C5002320D600832685005A
:1001D0002320D600832645002320D6008326050051
:1001E0002320D600130505016FF09FFD370510F0A1
:1001F000130505F2232005000000000000000000A8
:0402000000000000FA
:1010000044000080F00000803C0100806801008006
:1010100098010080000000000000000000000000B7
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:100030006384410093EF1F006384510093EF2F000E
:100040006384610093EF4F006384710093EF8F002E
:100050006384810093EF0F012320310023224100AC
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006304730093EF1F006304830049
:1000B00093EF2F006304930093EF4F006304A300BA
:1000C00093EF8F006304B30093EF0F0123206100CF
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006304D60093EF1F0020
:100120006304E60093EF2F006304F60093EF4F00A3
:100130006304060193EF8F006304160193EF0F0130
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F000063043901D2
:1001900093EF1F006304490193EF2F00630459019B
:1001A00093EF4F006304690193EF8F0063047901BB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063049C0193EF1F006304AC0193EF2F0084
:100210006304BC0193EF4F006304CC0193EF8F00A4
:100220006304DC0193EF0F0123208101232291015C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F00006384000093EF1F002B
:100270006304010093EF2F006384010093EF4F00AC
:100280006304020093EF8F006384020093EF0F0179
:100290006304100093EF0F026304200093EF0F0438
:1002A0006304300093EF0F086304400093EF0F10D6
:1002B0006304500093EF0F2023A0FD01971A000064
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063840F0213010000930100001302000059
:1002F000B74165879381113263840F0213010000B7
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3800FFE130100009301000013020000B0
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008000000000000000000000000050
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063D4410093EF1F0063D4510093EF2F006E
:1000400063D4610093EF4F0063D4710093EF8F008E
:1000500063D4810093EF0F0123203100232241005C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006354730093EF1F0063548300A9
:1000B00093EF2F006354930093EF4F006354A3001A
:1000C00093EF8F006354B30093EF0F01232061007F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006354D60093EF1F00D0
:100120006354E60093EF2F006354F60093EF4F0003
:100130006354060193EF8F006354160193EF0F0190
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006354390182
:1001900093EF1F006354490193EF2F0063545901FB
:1001A00093EF4F006354690193EF8F00635479011B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063549C0193EF1F006354AC0193EF2F00E4
:100210006354BC0193EF4F006354CC0193EF8F0004
:100220006354DC0193EF0F0123208101232291010C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063D4000093EF1F00DB
:100270006354010093EF2F0063D4010093EF4F000C
:100280006354020093EF8F0063D4020093EF0F01D9
:100290006354100093EF0F026354200093EF0F0498
:1002A0006354300093EF0F086354400093EF0F1036
:1002B0006354500093EF0F2023A0FD01971A000014
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063D40F0213010000930100001302000009
:1002F000B74165879381113263D40F021301000067
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3D00FFE13010000930100001302000060
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063F4410093EF1F0063F4510093EF2F002E
:1000400063F4610093EF4F0063F4710093EF8F004E
:1000500063F4810093EF0F0123203100232241003C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006374730093EF1F006374830069
:1000B00093EF2F006374930093EF4F006374A300DA
:1000C00093EF8F006374B30093EF0F01232061005F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006374D60093EF1F00B0
:100120006374E60093EF2F006374F60093EF4F00C3
:100130006374060193EF8F006374160193EF0F0150
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006374390162
:1001900093EF1F006374490193EF2F0063745901BB
:1001A00093EF4F006374690193EF8F0063747901DB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063749C0193EF1F006374AC0193EF2F00A4
:100210006374BC0193EF4F006374CC0193EF8F00C4
:100220006374DC0193EF0F012320810123229101EC
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063F4000093EF1F00BB
:100270006374010093EF2F0063F4010093EF4F00CC
:100280006374020093EF8F0063F4020093EF0F0199
:100290006374100093EF0F026374200093EF0F0458
:1002A0006374300093EF0F086374400093EF0F10F6
:1002B0006374500093EF0F2023A0FD01971A0000F4
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063F40F02130100009301000013020000E9
:1002F000B74165879381113263F40F021301000047
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3F00FFE13010000930100001302000040
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063C4410093EF1F0063C4510093EF2F008E
:1000400063C4610093EF4F0063C4710093EF8F00AE
:1000500063C4810093EF0F0123203100232241006C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006344730093EF1F0063448300C9
:1000B00093EF2F006344930093EF4F006344A3003A
:1000C00093EF8F006344B30093EF0F01232061008F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006344D60093EF1F00E0
:100120006344E60093EF2F006344F60093EF4F0023
:100130006344060193EF8F006344160193EF0F01B0
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006344390192
:1001900093EF1F006344490193EF2F00634459011B
:1001A00093EF4F006344690193EF8F00634479013B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063449C0193EF1F006344AC0193EF2F0004
:100210006344BC0193EF4F006344CC0193EF8F0024
:100220006344DC0193EF0F0123208101232291011C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063C4000093EF1F00EB
:100270006344010093EF2F0063C4010093EF4F002C
:100280006344020093EF8F0063C4020093EF0F01F9
:100290006344100093EF0F026344200093EF0F04B8
:1002A0006344300093EF0F086344400093EF0F1056
:1002B0006344500093EF0F2023A0FD01971A000024
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063C40F0213010000930100001302000019
:1002F000B74165879381113263C40F021301000077
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3C00FFE13010000930100001302000070
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:1000300063E4410093EF1F0063E4510093EF2F004E
:1000400063E4610093EF4F0063E4710093EF8F006E
:1000500063E4810093EF0F0123203100232241004C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006364730093EF1F006364830089
:1000B00093EF2F006364930093EF4F006364A300FA
:1000C00093EF8F006364B30093EF0F01232061006F
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006364D60093EF1F00C0
:100120006364E60093EF2F006364F60093EF4F00E3
:100130006364060193EF8F006364160193EF0F0170
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F00006364390172
:1001900093EF1F006364490193EF2F0063645901DB
:1001A00093EF4F006364690193EF8F0063647901FB
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063649C0193EF1F006364AC0193EF2F00C4
:100210006364BC0193EF4F006364CC0193EF8F00E4
:100220006364DC0193EF0F012320810123229101FC
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F000063E4000093EF1F00CB
:100270006364010093EF2F0063E4010093EF4F00EC
:100280006364020093EF8F0063E4020093EF0F01B9
:100290006364100093EF0F026364200093EF0F0478
:1002A0006364300093EF0F086364400093EF0F1016
:1002B0006364500093EF0F2023A0FD01971A000004
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E0006364F00313010000930100001302000097
:1002F000B7416587938111326364F00313010000F5
:10030000930100001302000037E1BC9A130101EFD2
:10031000E360F0FF130100009301000013020000EE
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800100000000000000000000004F
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,72 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF37040080930F000031
:100030006394410093EF1F006394510093EF2F00EE
:100040006394610093EF4F006394710093EF8F000E
:100050006394810093EF0F0123203100232241009C
:10006000232451002326610023287100232A8100C4
:10007000232CF10197100000938000F91711000064
:10008000130101FC03A300009303000013041000FC
:100090009304F0FF370500801305F5FFB7050080D6
:1000A000930F00006314730093EF1F006314830029
:1000B00093EF2F006314930093EF4F006314A3009A
:1000C00093EF8F006314B30093EF0F0123206100BF
:1000D0002322710023248100232691002328A100DC
:1000E000232AB100232CF10197100000938000F225
:1000F00017110000130181F603A60000930600000B
:10010000130710009307F0FF370800801308F8FF6B
:10011000B7080080930F00006314D60093EF1F0010
:100120006314E60093EF2F006314F60093EF4F0083
:100130006314060193EF8F006314160193EF0F0110
:100140002320C1002322D1002324E1002326F10033
:1001500023280101232A1101232CF101971000000B
:10016000938000EB17110000130101F103A90000B7
:1001700093090000130A1000930AF0FF370B008068
:10018000130BFBFFB70B0080930F000063143901C2
:1001900093EF1F006314490193EF2F00631459017B
:1001A00093EF4F006314690193EF8F00631479019B
:1001B00093EF0F0123202101232231012324410148
:1001C0002326510123286101232A7101232CF101E7
:1001D00097100000938000E417110000130181EBD9
:1001E00003AC0000930C0000130D1000930DF0FF02
:1001F000370E0080130EFEFFB70E0080930F000035
:1002000063149C0193EF1F006314AC0193EF2F0064
:100210006314BC0193EF4F006314CC0193EF8F0084
:100220006314DC0193EF0F0123208101232291014C
:100230002324A1012326B1012328C101232AD101AE
:10024000232CF101971D0000938D8DE69300000093
:10025000130110009301F0FF370200801302F2FF38
:10026000B7020080930F00006394000093EF1F001B
:100270006314010093EF2F006394010093EF4F008C
:100280006314020093EF8F006394020093EF0F0159
:100290006314100093EF0F026314200093EF0F0418
:1002A0006314300093EF0F086314400093EF0F10B6
:1002B0006314500093EF0F2023A0FD01971A000054
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
:1002E00063940F0213010000930100001302000049
:1002F000B74165879381113263940F0213010000A7
:10030000930100001302000037E1BC9A130101EFD2
:10031000E3900FFE130100009301000013020000A0
:1003200023200B0023222B0023243B0023264B00F9
:1003300017150000130505CF97150000938585D884
:10034000370610F01306C6F26306B5028326C50011
:100350002320D600832685002320D600832645004F
:100360002320D600832605002320D600130505018F
:100370006FF09FFD370510F0130505F223200500EF
:040380000000000079
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080FFFFFFFF000000000000000054
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:10000000971700009387070093001000130100006A
:10001000B701F17F9381F1FF370200809302F0FF77
:1000200073900234F3B00034F3900234733101342E
:1000300073910234F3B10134F39102347332023418
:1000400073920234F3B20234F312003423A0070097
:1000500023A2170023A4270023A6370023A84700C4
:1000600023AA570097120000938242FB93051000C9
:1000700013060000B706F17F9386F6FF370700806E
:100080009307F0FF73900734F3B5053473360634E5
:10009000F3B6063473370734F3B7073473380034D4
:1000A00023A0B20023A2C20023A4D20023A6E20010
:1000B00023A8F20023AA0201171D0000130D8DF7DB
:1000C000B75A3412938A8A67130AF0FF73100A34FE
:1000D00073BB0A34F33A0B34F31B0A3473BC0B348E
:1000E000F33C003423205D0123226D0123247D0194
:1000F00023268D0123289D01971000009380C0F4D2
:10010000377F7242130FFFE673100F3473300F34D2
:1001100023A0000023A2E00117110000130141F306
:10012000B79FFFF7938F8F8173900F347330003434
:1001300073300034F33F0034232001002322F10107
:1001400017110000130141F11302F0FFB752389666
:1001500093824227B7531632938383497310023434
:10016000F3B20234F3B30334733404342320510064
:10017000232271002324810017150000130585E850
:1001800097150000938505EE370610F01306C6F2AA
:100190006306B5028326C5002320D600832685008A
:1001A0002320D600832645002320D6008326050081
:1001B0002320D600130505016FF09FFD370510F0D1
:1001C000130505F2232005000000000000000000D8
:0401D000000000002B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,25 @@
:0200000480007A
:1000000097170000938707001304F0FF7310043460
:10001000F3F00034F31004347371003473110434BA
:10002000F3F10F34F311043473720834731204348F
:10003000F3F20734F312043423A0070023A21700BD
:1000400023A4270023A6370023A8470023AA57008C
:1000500023AC870097120000938282FC1304F0FF08
:1000600073100434F3F5003473760034F3F60F3470
:1000700073770834F3F707347378003423A0B200A1
:1000800023A2C20023A4D20023A6E20023A8F200E8
:1000900023AA020123AC820097100000938000FA8B
:1000A000375A1632130A8A4973100A3473F0073428
:1000B000731A0A3423A0000023A240011715000080
:1000C000130545F4971500009385C5F7370610F022
:1000D0001306C6F26306B5028326C5002320D600A8
:1000E000832685002320D600832645002320D600C2
:1000F000832605002320D600130505016FF09FFD20
:10010000370510F0130505F223200500000000005C
:0401100000000000EB
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,38 @@
:0200000480007A
:10000000971700009387070093001000130100006A
:10001000B701F17F9381F1FF370200809302F0FF77
:1000200073100034F3A00034F31000347321013452
:1000300073110034F3A10134F3110034732202343C
:1000400073120034F3A20234F312003423A0070029
:1000500023A2170023A4270023A6370023A84700C4
:1000600023AA570097120000938242FB93051000C9
:1000700013060000B706F17F9386F6FF370700806E
:100080009307F0FF73100034F3A50534732606348C
:10009000F3A6063473270734F3A707347328003414
:1000A00023A0B20023A2C20023A4D20023A6E20010
:1000B00023A8F20023AA0201171D0000130D8DF7DB
:1000C000B75A3412938A8A677310003473AB0A34B8
:1000D000F32B0B34F31B003473AC0B34F32C0034D0
:1000E00023205D0123226D0123247D0123268D0120
:1000F00023289D0197100000938000F5377F7242FE
:10010000130FFFE673100F3473200F3423A0000089
:1001100023A2E00117110000130181F3B79FFFF73D
:10012000938F8F8173900F347320003473200034C9
:10013000F32F0034232001002322F10117110000C6
:10014000130181F1B753163293838349B75238961E
:100150009382422773100034F3A20234F3A30334D2
:1001600073240434232051002322710023248100AE
:1001700017150000130505E997150000938585EE16
:10018000370610F01306C6F26306B5028326C500D3
:100190002320D600832685002320D6008326450011
:1001A0002320D600832605002320D6001305050151
:1001B0006FF09FFD370510F0130505F223200500B1
:0401C000000000003B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,24 @@
:0200000480007A
:10000000971700009387070073100034F3E0003463
:10001000F31000347361003473110034F3E10F34D2
:10002000F31100347362083473120034F3E20734BE
:10003000F312003423A0070023A2170023A42700F3
:1000400023A6370023A8470023AA570097120000D1
:100050009382C2FC73100034F3E5003473660034FD
:10006000F3E60F3473670834F3E70734736800343A
:1000700023A0020023A2B20023A4C20023A6D20020
:1000800023A8E20023AAF20023AC0201971000008B
:10009000938080FA375A1632130A8A4973100A3449
:1000A00073E00734F31A0A3423A0000023A250019E
:1000B00023A44001171500001305C5F4971500008F
:1000C000938545F8370610F01306C6F26306B502AD
:1000D0008326C5002320D600832685002320D60052
:1000E000832645002320D600832605002320D60042
:1000F000130505016FF09FFD370510F0130505F29C
:0401000023200500B3
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,30 @@
:0200000480007A
:1000000097170000938707009300100093010000EA
:100010009302F0FFB70D0080938DFDFFB70E0080B7
:10002000731000347391003473920134739302346B
:10003000739E0D34739F0E34F31F003423A02700EA
:1000400023A2470023A4670023A6C70123A8E70132
:1000500023AAF701171D0000130D4DFCB7503412F1
:100060009380806737E1BC9A130101EF73900034ED
:10007000F311013473920134F31202347313003418
:1000800023203D0023224D0023245D0023266D0004
:1000900097100000938080F9377172421301F1E6E6
:1000A000731001347310003423A0000017110000F6
:1000B000130101F8B79DFFF7938D8D8173900D3477
:1000C0007310003473100034F31200342320010045
:1000D0002322510017110000130101F6B753163205
:1000E000938383493763721413036383B75238963B
:1000F0009382422773100334F3920234F393033450
:100100007314003423205100232271002324810022
:1001100017150000130505EF97150000938585F26C
:10012000370610F01306C6F26306B5028326C50033
:100130002320D600832685002320D6008326450071
:100140002320D600832605002320D60013050501B1
:100150006FF09FFD370510F0130505F22320050011
:04016000000000009B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,16 @@
:0200000480007A
:1000000097170000938707007310003473D10034F2
:100010007352003473D30F3473DE0734735F0834C4
:10002000F35F003423A0070023A2270023A4470086
:1000300023A6670023A8C70123AAE70123ACF70181
:10004000971000009380C0FD73D0073473500034C4
:1000500023A00000171500001305C5FA971500002E
:10006000938545FC370610F01306C6F26306B50209
:100070008326C5002320D600832685002320D600B2
:10008000832645002320D600832605002320D600A2
:10009000130505016FF09FFD370510F0130505F2FC
:0400A0002320050014
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:100000009710000093800000371111111301111196
:100010006F0080001301000023A020009710000053
:10002000938080FE37212222130121221702000033
:1000300013020201670002001301000023A0200048
:1000400097100000938080FC93025000130360001F
:10005000373133331301313363845200130100000D
:1000600023A0200097100000938080FA9302500094
:100070001303600037414444130141446394620018
:100080001301000023A0200097100000938080F847
:100090009302500013036000375155551301515519
:1000A00063C462001301000023A020009710000029
:1000B000938080F6930250001303600037616666F8
:1000C0001301616663E462001301000023A02000B5
:1000D00097100000938080F4930250001303600097
:1000E0003771777713017177635453001301000060
:1000F00023A0200097100000938080F2930250000C
:10010000130360003791888813018188637453005A
:100110001301000023A0200017150000130585EE31
:1001200097150000938505F0370610F01306C6F208
:100130006306B5028326C5002320D60083268500EA
:100140002320D600832645002320D60083260500E1
:100150002320D600130505016FF09FFD370510F031
:10016000130505F223200500000000000000000038
:04017000000000008B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,15 @@
:0200000480007A
:10000000970000009380C002F39F503097100000CB
:10001000938040FF3711111113011111730010006B
:1000200023A0000073905F306F008002732F1034A4
:10003000130F4F0073101F34732F203423A0E001DF
:1000400023A2200023A400009380C000730020306E
:1000500017150000130505FB97150000938585FB18
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,15 @@
:0200000480007A
:10000000970000009380C002F39F503097100000CB
:10001000938040FF3711111113011111730000007B
:1000200023A0000073905F306F008002732F1034A4
:10003000130F4F0073101F34732F203423A0E001DF
:1000400023A2200023A400009380C000730020306E
:1000500017150000130505FB97150000938585FB18
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,17 @@
:0200000480007A
:10000000171800001308480097180000938888000C
:100010008320080003510800835128000342F8FFA1
:100020008342080003431800834328000344380038
:1000300023A0180023A2280023A4380023A64800E8
:1000400023A8580023AA680023AC780023AE8800B8
:1000500017150000130505FC97150000938585FD15
:10006000370610F01306C6F26306B5028326C500F4
:100070002320D600832685002320D6008326450032
:100080002320D600832605002320D6001305050172
:100090006FF09FFD370510F0130505F223200500D2
:0400A000000000005C
:10100000EFCDAB8967452301000000000000000020
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,16 @@
:0200000480007A
:10000000171800001308480097180000938888000C
:10001000930100008320080003214800171A000004
:10002000130A4AFE970A0000938A4A0183270A00AE
:1000300023A0FA000F1000003701000023A01800D1
:1000400023A2280023A4380023A6F80017150000D7
:10005000130545FC971500009385C5FC370610F085
:100060001306C6F26306B5028326C5002320D60018
:10007000832685002320D600832645002320D60032
:10008000832605002320D600130505016FF09FFD90
:10009000370510F0130505F22320050000000000CD
:0400A000000000005C
:10100000B3011100300000001200000000000000D9
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,65 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033824100DD
:10003000B382510033836100B38371003384810044
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B30494003305A400B305B400A0
:100090003306C400B306D40023208100232291003C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF370900803387E6006F
:1000E000B387F60033880601B388160133892601E9
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3093901330A4901B30A5901E9
:10014000330B6901B30B79012320210123223101F3
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E0080338C8B01FF
:10019000B38C9B01338DAB01B38DBB01338ECB018F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00930D1000F3
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
:1001E0003381B001B301B1012320BD012322CD0130
:1001F0002324DD012326ED012328FD01232A1D00F0
:10020000232C2D00232E3D0097100000938000E149
:1002100017110000130181EB03AE0000B79DFFF73B
:10022000938D8D813300BE012320010097100000C3
:10023000938000DF17110000130181E903AE000075
:10024000B79DFFF7938D8D813300BE01B30200008F
:10025000232001002322510097100000938080DCAE
:1002600017110000130141E783A100003382010050
:10027000B30202003303500033070300B307070043
:1002800033880700B30C0001330D9001B30D0D004E
:10029000232041002322A1012324B10117150000CE
:1002A000130545D9971500009385C5E3370610F06F
:1002B0001306C6F26306B5028326C5002320D600C6
:1002C000832685002320D600832645002320D600E0
:1002D000832605002320D600130505016FF09FFD3E
:1002E000370510F0130505F223200500000000007B
:0402F000000000000A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:1010100000000080CDAB00007856341298BADCFE98
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,46 @@
:0200000480007A
:10000000971000009380000137513412130181676B
:100010006F0080001301000023A0000023A2200035
:1000200097100000938080FF1301F0FF9301F0FF11
:1000300037D2ED0F130292BA6F0080021301000055
:100040009301000013020000B741658793811132CC
:100050006F008002130100009301000013020000F2
:1000600037E1BC9A130101EF6FF01FFE130100008E
:10007000930100001302000023A0000023A220002F
:1000800023A4300023A6400097140000938484F733
:1000900017150000130585F91301F0FF9301F0FF18
:1000A0001302F0FF9302F0FF3753555513035355D6
:1000B00083AC040003AC4400EF00C001B72122224E
:1000C00093812122EF0F0003B742444493824244BC
:1000D0006F004004371111111301111167800000E6
:1000E00013010000930100001302000093020000BE
:1000F00013030000373233331302323367800F00AB
:10010000130100009301000013020000930200009D
:1001100013030000B3C3900133C48F0123202500D3
:10012000232235002324450023265500232865007B
:10013000232A7500232C850097140000938404ED76
:1001400017150000130545F01301F0FF9301F0FFB0
:100150001302F0FF9302F0FF1303F0FF03AC04005F
:1001600083AC44006F004002B77177779381717759
:1001700067800F00130100009301000013020000CC
:100180009302000013030000376166661301616685
:10019000EFFF9FFD3792888813028288EF000001ED
:1001A00037B3AAAA1303A3AA6F004002B7A2999972
:1001B0009382929967800000130100009301000070
:1001C000130200009302000013030000B3C38F0169
:1001D00033C4900123202500232235002324450029
:1001E0002326550023286500232A7500232C85002B
:1001F00017150000130505E297150000938585E6A5
:10020000370610F01306C6F26306B5028326C50052
:100210002320D600832685002320D6008326450090
:100220002320D600832605002320D60013050501D0
:100230006FF09FFD370510F0130505F22320050030
:0402400000000000BA
:10100000BC000080C800008094010080A001008026
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,60 @@
:0200000480007A
:10000000971000009380000137513412130181676B
:100010009701000093810101678001001301000036
:1000200023A0000023A2200097100000938000FF6F
:100030001301F0FF9301F0FF37D2ED0F130292BAD4
:10004000970F0000938F8F0367800F00130100004C
:100050009301000013020000B741658793811132BC
:100060009702000093828203678002001301000060
:10007000930100001302000037E1BC9A130101EF65
:1000800097070000938787FD678007001301000032
:10009000930100001302000023A0000023A220000F
:1000A00023A4300023A6400097140000938484F515
:1000B00017150000130585F71301F0FF9301F0FFFA
:1000C0001302F0FF9302F0FF3753555513035355B6
:1000D00083AC040003AC4400970300009383430304
:1000E000E7800300B7212222938121221704000018
:1000F00013040404E70F0400B742444493824244CB
:10010000170F0000130FCF0467000F0037111111F4
:10011000130111116780000013010000930100001A
:100120001302000093020000130300003732333340
:100130001302323367800F001301000093010000A7
:10014000130200009302000013030000B3C39001E8
:1001500033C48F01232025002322350023244500AA
:100160002326550023286500232A7500232C8500AB
:1001700097140000938484E9171500001305C5EC5B
:100180001301F0FF9301F0FF1302F0FF9302F0FF61
:100190001303F0FF03AC040083AC44009707000096
:1001A0009387C70267800700B7717777938171776C
:1001B00067801F001301000093010000130200007C
:1001C0009302000013030000376166661301616645
:1001D000970F0000938F9FFDE78F0F00379288885D
:1001E000130282889700000093801002E7800000CD
:1001F00037B3AAAA1303A3AA170F0000130FCF0245
:1002000067000F00B7A299999382929967801000B6
:10021000130100009301000013020000930200008C
:1002200013030000B3C38F0133C4900123202500C2
:10023000232235002324450023265500232865006A
:10024000232A7500232C850097100000938080E1FD
:100250003712111113021211970100009381F1005E
:100260006780110013020000B7222222938222220B
:1002700097010000938111016780F1FF9302000054
:1002800037333333130333339701000093811181E4
:100290006780F17F13030000B743444493834344D2
:1002A0009711000093810181678001809303000012
:1002B00023A0400023A2500023A4600023A67000C6
:1002C00017150000130505D597150000938585DAED
:1002D000370610F01306C6F26306B5028326C50082
:1002E0002320D600832685002320D60083264500C0
:1002F0002320D600832605002320D6001305050100
:100300006FF09FFD370510F0130505F2232005005F
:0403100000000000E9
:10100000E4000080F8000080DC010080F001008036
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,51 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083810F0003821F0083822F0003833F0030
:100020002320310023224100232451002326610094
:10003000171C0000130C5CFD9712000093828201D4
:10004000830CFCFF030D0C00830D1C00030E2C0021
:1000500023A0920123A2A20123A4B20123A6C201DC
:1000600097130000938373FA17140000130484FF9E
:10007000038F1300838F23008380330003814300A9
:100080002320E4012322F401232414002326240046
:10009000171500001305C57797150000938585FD9A
:1000A00003060580830615800307258083073580B6
:1000B00023A0C50023A2D50023A4E50023A6F500B4
:1000C000970600009386467517170000130787FBF5
:1000D0008387C67F0388D67F8388E67F0389F67F80
:1000E0002320F700232207012324170123262701B9
:1000F00017180000130888F297180000938888F9F1
:100100000309C8FF8309D8FF030AE8FF830AF8FF41
:10011000030B0800830B1800030C2800830C380025
:10012000030D4800830D5800030E6800830E78000D
:1001300023A0280123A2380123A4480123A65801A3
:1001400023A8680123AA780123AC880123AE980173
:1001500023A0A80323A2B80323A4C80323A6D8037B
:10016000971A0000938A0AEC171B0000130B8BF5FB
:1001700003800A0023200B00971A0000938ACAEA22
:10018000171B0000130B4BF483AB0A00038C0B000E
:10019000930C0C0023209B01971C0000938C4CE9CE
:1001A000171D0000130D8DF2838C0C0023209D0180
:1001B000971D0000938D1DE8171E0000130E4EF1D1
:1001C000838DFDFF2320BE0117150000130585E771
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,51 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083C10F0003C21F0083C22F0003C33F0030
:100020002320310023224100232451002326610094
:10003000171C0000130C5CFD9712000093828201D4
:10004000834CFCFF034D0C00834D1C00034E2C0021
:1000500023A0920123A2A20123A4B20123A6C201DC
:1000600097130000938373FA17140000130484FF9E
:1000700003CF130083CF230083C0330003C14300A9
:100080002320E4012322F401232414002326240046
:10009000171500001305C57797150000938585FD9A
:1000A00003460580834615800347258083473580B6
:1000B00023A0C50023A2D50023A4E50023A6F500B4
:1000C000970600009386467517170000130787FBF5
:1000D00083C7C67F03C8D67F83C8E67F03C9F67F80
:1000E0002320F700232207012324170123262701B9
:1000F00017180000130888F297180000938888F9F1
:100100000349C8FF8349D8FF034AE8FF834AF8FF41
:10011000034B0800834B1800034C2800834C380025
:10012000034D4800834D5800034E6800834E78000D
:1001300023A0280123A2380123A4480123A65801A3
:1001400023A8680123AA780123AC880123AE980173
:1001500023A0A80323A2B80323A4C80323A6D8037B
:10016000971A0000938A0AEC171B0000130B8BF5FB
:1001700003C00A0023200B00971A0000938ACAEAE2
:10018000171B0000130B4BF483AB0A0003CC0B00CE
:10019000930C0C0023209B01971C0000938C4CE9CE
:1001A000171D0000130D8DF283CC0C0023209D0140
:1001B000971D0000938D1DE8171E0000130E4EF1D1
:1001C00083CDFDFF2320BE0117150000130585E731
:1001D00097150000938505F0370610F01306C6F258
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083910F0003922F002320310023224100FF
:10002000171C0000130C5CFE971200009382020262
:10003000831CFCFF031D1C0023A0920123A2A2012C
:1000400097130000938373FC1714000013048400BB
:10005000039F1300839F33002320E4012322F40134
:10006000171500001305C57A97150000938505FF45
:10007000031605808316258023A0C50023A2D50082
:10008000970600009386367917170000130787FD3F
:100090008397D67F0398F67F2320F700232207015A
:1000A00017180000130888F797180000938808FCB9
:1000B0000319C8FF8319E8FF031A0800831A2800F0
:1000C000031B4800831B680023A0280123A23801DA
:1000D00023A4480123A6580123A8680123AA780174
:1000E000971A0000938A0AF4171B0000130B8BF970
:1000F00003900A0023200B00971A0000938ACAF28B
:10010000171B0000130B4BF883AB0A00039C0B007A
:10011000930C0C0023209B01971C0000938C4CF146
:10012000171D0000130D8DF6839C0C0023209D01EC
:10013000971D0000938D1DF0171E0000130E4EF545
:10014000839DFDFF2320BE0117150000130585EFD9
:1001500097150000938505F4370610F01306C6F2D4
:100160006306B5028326C5002320D60083268500BA
:100170002320D600832645002320D60083260500B1
:100180002320D600130505016FF09FFD370510F001
:10019000130505F223200500000000000000000008
:0401A000000000005B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,39 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083D10F0003D22F0023203100232241007F
:10002000171C0000130C5CFE971200009382020262
:10003000835CFCFF035D1C0023A0920123A2A201AC
:1000400097130000938373FC1714000013048400BB
:1000500003DF130083DF33002320E4012322F401B4
:10006000171500001305C57A97150000938505FF45
:10007000035605808356258023A0C50023A2D50002
:10008000970600009386367917170000130787FD3F
:1000900083D7D67F03D8F67F2320F70023220701DA
:1000A00017180000130888F797180000938808FCB9
:1000B0000359C8FF8359E8FF035A0800835A2800F0
:1000C000035B4800835B680023A0280123A238015A
:1000D00023A4480123A6580123A8680123AA780174
:1000E000971A0000938A0AF4171B0000130B8BF970
:1000F00003D00A0023200B00971A0000938ACAF24B
:10010000171B0000130B4BF883AB0A0003DC0B003A
:10011000930C0C0023209B01971C0000938C4CF146
:10012000171D0000130D8DF683DC0C0023209D01AC
:10013000971D0000938D1DF0171E0000130E4EF545
:1001400083DDFDFF2320BE0117150000130585EF99
:1001500097150000938505F4370610F01306C6F2D4
:100160006306B5028326C5002320D60083268500BA
:100170002320D600832645002320D60083260500B1
:100180002320D600130505016FF09FFD370510F001
:10019000130505F223200500000000000000000008
:0401A000000000005B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,27 @@
:0200000480007A
:100000009717000093870701B7000000B7110000A1
:10001000B7F2FFFFB7FEFF7FB70F008023A01700E6
:1000200023A2370023A4570023A6D70123A8F70152
:1000300097170000938707FD171800001308C8FEE4
:1000400003A1070003A2070003A3070003AE0700F4
:1000500003AF07003701008037F2FF7F370300004E
:10006000371E000037FFFFFF23202800232248000F
:10007000232468002326C8012328E80197180000DC
:100080009388C8FBB77072429380F0E6B75734127A
:100090009387876737EFBC9A130F0FEF3771724260
:1000A0001301F1E63758341213088867B7EFBC9A8A
:1000B000938F0FEF23A0180023A2F80023A4E801D8
:1000C00023A6280023A8080123AAF8011715000079
:1000D000130545F4971500009385C5F7370610F012
:1000E0001306C6F26306B5028326C5002320D60098
:1000F000832685002320D600832645002320D600B2
:10010000832605002320D600130505016FF09FFD0F
:10011000370510F0130505F223200500000000004C
:0401200000000000DB
:10100000111111110000000000000000000000009C
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,33 @@
:0200000480007A
:10000000971F0000938F0F00171100001301810349
:1000100083A10F0023203100171C0000130CDCFE0D
:100020009712000093824202832CFCFF23A09201CE
:1000300097130000938373FD171400001304040149
:1000400083AF13002320F401171500001305457C2E
:10005000971500009385C5FF0326058023A0C500E2
:10006000970600009386167B17170000130787FE7C
:1000700083A7F67F2320F70017180000130808FA5B
:1000800097180000938848FD0329C8FF83290800BA
:10009000032A480023A0280123A2380123A44801F1
:1000A000971A0000938A0AF8171B0000130B8BFBAA
:1000B00003A00A0023200B00971A0000938ACAF6B7
:1000C000171B0000130B4BFA83AB0A0003AC0B00A9
:1000D000930C0C0023209B01971C0000938C4CF583
:1000E000171D0000130D8DF883AC0C0023209D011B
:1000F000971D0000938D1DF4171E0000130E4EF780
:1001000083ADFDFF2320BE0117150000130585F305
:1001100097150000938505F6370610F01306C6F212
:100120006306B5028326C5002320D60083268500FA
:100130002320D600832645002320D60083260500F1
:100140002320D600130505016FF09FFD370510F041
:10015000130505F223200500000000000000000048
:04016000000000009B
:1010000022F2F111F44433F366F6F555F88877F7D8
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
:101020007856341228100080F0DEBC9A10325476C4
:1010300098BADCFE00000000000000000000000084
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,53 @@
:0200000480007A
:100000009700000093808020F39F5030737012306F
:1000100097100000938000FF371111111301111187
:100020006F00A0001301000097100000938040FEB5
:10003000372122221301212217020000130212018C
:10004000670002001301000023A0200093804000FD
:100050003731333313013133170200001302020129
:10006000670012001301000023A0200093804000CD
:100070003741444413014144170200001302420176
:100080006700D2FF1301000023A0200093804000EE
:1000900097100000938080F8375155551301515542
:1000A0001702000013022201670002001301000082
:1000B00037616666130161661702000013023201A0
:1000C0006700020013010000377177771301717721
:1000D0001702000013020201670022001301000052
:1000E00037918888130181881702000013020201EA
:1000F000670032001301000097100000938000F5A4
:1001000093025000130360006387620037A199993E
:100110001301919913000000130000006385520041
:100120001301000097100000938000F39302500029
:10013000130360006397520037B1AAAA1301A1AA62
:10014000130000001300000063956200130100001B
:1001500097100000938000F1930250001303600099
:100160006347530037C1BBBB1301B1BB1300000091
:100170001300000063C56200130100009710000027
:10018000938000EF930250001303600063675300F5
:1001900037D1CCCC1301C1CC1300000013000000F8
:1001A00063E562001301000097100000938000EDEA
:1001B000930250001303600063D7620037E1DDDD76
:1001C0001301D1DD1300000013000000635553003C
:1001D0001301000097100000938000EB9302500081
:1001E0001303600063F7620037F1EEEE1301E1EEF6
:1001F000130000001300000063755300130100009A
:1002000073905F306F000003732F3034130FEFFFD4
:1002100073101F34732F3034137F3F0023A0E0018D
:10022000732F203423A2E00123A420009380C00078
:1002300073002030171500001305C5DC971500006A
:10024000938545E5370610F01306C6F26306B5023E
:100250008326C5002320D600832685002320D600D0
:10026000832645002320D600832605002320D600C0
:10027000130505016FF09FFD370510F0130505F21A
:040280002320050032
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,44 @@
:0200000480007A
:100000009700000093804014F39F50309711000038
:10001000938141FF171100001301C1FF97100000E9
:1000200093804000930250001303600003A201007C
:100030002320410003A211002322410003A221003A
:100040002324410003A23100232641009711000020
:10005000938181FB17110000130141FE97100000EE
:100060009380C0FF930250001303600003920100CD
:10007000232041000392110023224100039221001A
:1000800023244100039231002326410003D20100C2
:100090002328410003D21100232A410003D221006A
:1000A000232C410003D23100232E41001711000000
:1000B0001301C1FC97100000938040FD1303000062
:1000C000B7A299999382929923205100232251003B
:1000D00023245100232651002320610013014100F5
:1000E000A32061001301410023216100130141009D
:1000F000A3216100171100001301C1FA971000003D
:10010000938040FB13030000B7A2999993829299C0
:100110002320510023225100232451002326510083
:100120002310610013014100A3106100130141007D
:100130002311610013014100A311610073905F302E
:100140006F00C002732F1034130F4F0073101F3451
:10015000732F3034137F3F0023A0E001732F20342E
:1001600023A2E00193808000730020301715000067
:10017000130545EA971500009385C5F4370610F07E
:100180001306C6F26306B5028326C5002320D600F7
:10019000832685002320D600832645002320D60011
:1001A000832605002320D600130505016FF09FFD6F
:1001B000370510F0130505F22320050000000000AC
:0401C000000000003B
:10100000C1B1A19102F2E2D2000000000000000094
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,37 @@
:0200000480007A
:10000000971000009380000013012000930130003E
:10001000130240009302500013036000930370002A
:1000200013048000930490001305A0009305B00012
:100030001306C0009306D0001307E0009307F000FA
:1000400013080001930810011309200193093001DE
:10005000130A4001930A5001130B6001930B7001C6
:10006000130C8001930C9001130DA001930DB001AE
:10007000130EC001930ED001130FE001930FF00196
:100080001300000013000000130000001300000024
:10009000130000001300000023A0000023A2200092
:1000A00023A4300023A6400023A8500023AA600008
:1000B00023AC700023AE800023A0900223A2A002F4
:1000C00023A4B00223A6C00223A8D00223AAE002E0
:1000D00023ACF00223AE000323A0100523A22005C9
:1000E00023A4300523A6400523A8500523AA6005B4
:1000F00023AC700523AE800523A0900723A2A007A0
:1001000023A4B00723A6C00723A8D00723AAE0078B
:1001100023ACF00797110000938181F617040000CB
:100120001300000013000000130000001300000083
:100130001300000097040000B384844023A09100C2
:1001400017150000130505EC97150000938585F33E
:10015000370610F01306C6F26306B5028326C50003
:100160002320D600832685002320D6008326450041
:100170002320D600832605002320D6001305050181
:100180006FF09FFD370510F0130505F223200500E1
:04019000000000006B
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,66 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013020000930210001303F0FFFD
:10002000B70300809383F3FF3704008033E241007D
:10003000B3E2510033E36100B3E3710033E48100C4
:100040002320310023224100232451002326610074
:1000500023287100232A8100971000009380C0FAA2
:1000600017110000130181FE03A400009304000097
:10007000130510009305F0FF370600801306F6FF06
:10008000B7060080B36494003365A400B365B40080
:100090003366C400B366D40023208100232291007C
:1000A0002324A1002326B1002328C100232AD10044
:1000B00097100000938080F517110000130181FA5A
:1000C00083A6000013070000930710001308F0FF39
:1000D000B70800809388F8FF3709008033E7E6000F
:1000E000B3E7F60033E80601B3E8160133E9260169
:1000F0002320D1002322E1002324F1002326010143
:1001000023281101232A210197100000938040F039
:1001100017110000130181F603A9000093090000E4
:10012000130A1000930AF0FF370B0080130BFBFF3C
:10013000B70B0080B3693901336A4901B36A5901C9
:10014000336B6901B36B7901232021012322310133
:10015000232441012326510123286101232A71010F
:1001600097100000938000EB17110000130181F23B
:1001700083AB0000130C0000930C1000130DF0FF74
:10018000B70D0080938DFDFF370E008033EC8B019F
:10019000B3EC9B0133EDAB01B3EDBB0133EECB010F
:1001A0002320710123228101232491012326A1010F
:1001B0002328B101232AC101971C0000938CCCE5B0
:1001C000171D0000130D8DEE03AE0C00130200018D
:1001D00093020002130300049303000813040010A9
:1001E00093040080B36E4E0033EF5E00B36F6F0078
:1001F000B3E07F0033E18000B361910023204D0024
:100200002322CD012324DD012326ED012328FD0136
:10021000232A1D00232C2D00232E3D0097100000C3
:100220009380C0DF17110000130141EA03AE000004
:10023000B79DFFF7938D8D813360BE0123200100B0
:10024000971000009380C0DD17110000130141E8F2
:1002500003AE0000B79DFFF7938D8D813360BE0123
:10026000B3620000232001002322510097100000F8
:10027000938040DB17110000130101E683A1000009
:1002800033E20100B36202003363500033670300BE
:10029000B367070033E80700B36C0001336D9001CA
:1002A000B36D0D00232041002322A1012324B101BD
:1002B00017150000130505D897150000938585E2F2
:1002C000370610F01306C6F26306B5028326C50092
:1002D0002320D600832685002320D60083264500D0
:1002E0002320D600832605002320D6001305050110
:1002F0006FF09FFD370510F0130505F22320050070
:0403000000000000F9
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800D0000007856341298BADCFE03
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,56 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A1000013E2110093E2F17F13E3F1FFEB
:1000200093E3010013E401802320310023224100E7
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101007D
:1000500003A40000936414001365F47F9365F4FF18
:1000600013660400936604802320810023229100FC
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FD84
:1000900083A6000013E7160093E7F67F13E8F6FF48
:1000A00093E8060013E906802320D1002322E10013
:1000B0002324F1002326010123281101232A2101F1
:1000C000971000009380C0F417110000130101FB8A
:1000D00003A9000093691900136AF97F936AF9FF75
:1000E000136B0900936B0980232021012322310126
:1000F000232441012326510123286101232A710170
:1001000097100000938000F117110000130181F88F
:1001100083AB000013EC1B0093ECFB7F13EDFBFFA4
:1001200093ED0B0013EE0B8023207101232281013C
:10013000232491012326A1012328B101232AC101EF
:10014000171D0000130D4DED971D0000938D0DF64A
:10015000032E0D00936E0E0113EF0E02936F0F042A
:1001600093E00F0813E100109361018023A0CD01FB
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F383A2000013E01200C5
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F183A2000013E01200936210004A
:1001C000232001002322510097100000938080E536
:1001D00017110000130101F083A1000013E20100D8
:1001E0009362020013E302001367030093670700A2
:1001F00013E80700936C080013ED0C00936D0D00DD
:1002000023203100232241002324A1012326B10110
:1002100017150000130505E297150000938585EC7E
:10022000370610F01306C6F26306B5028326C50032
:100230002320D600832685002320D6008326450070
:100240002320D600832605002320D60013050501B0
:100250006FF09FFD370510F0130505F22320050010
:04026000000000009A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:10101000000000800D0000007856341298BADCFE03
:10102000145892360000000000000000000000008C
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:100000001718000013080800377072421300F0E65A
:10001000B7303356938090243721562D1301210594
:10002000B77169529381313637826B731302029232
:10003000B7627473938222573753206E1303F3E62B
:10004000B773694D938313C63764646F1304341711
:10005000B744796B93843406377565741305352777
:10006000B7756E28938535F737266B6513068604BA
:10007000B76652209386461637376D6F1307C792BF
:10008000B7377069938737E62320080023221800CA
:10009000232428002326380023284800232A580038
:1000A000232C6800232E7800232088022322980224
:1000B0002324A8022326B8022328C802232AD80210
:1000C000232CE802232EF80217120000130282F7F5
:1000D00037686F6313081846B778656A938808B461
:1000E0003779282013091986B7696A619389B95647
:1000F000376A7661130A0A52B75A202E938A5AC673
:10010000377B6F63130B9BD2B77B6973938BEB02C7
:10011000378C2066130CFC96B72C6567938C9C0675
:10012000377D7365130D1D36B72D7375938DDD0601
:10013000371E293A130EAED0B77E6968938E0E3201
:10014000372F6461130F4F07B77F2075938F5F269A
:10015000232002012322120123242201232632011B
:1001600023284201232A5201232C6201232E7201EB
:1001700023208203232292032324A2032326B203F3
:100180002328C203232AD203232CE203232EF203C3
:1001900017120000130202EF232002002322120094
:1001A000232422002326320017150000130585E5BD
:1001B00097150000938505EE370610F01306C6F27A
:1001C0006306B5028326C5002320D600832685005A
:1001D0002320D600832645002320D6008326050051
:1001E0002320D600130505016FF09FFD370510F0A1
:1001F000130505F2232005000000000000000000A8
:0402000000000000FA
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,57 @@
:0200000480007A
:1000000017180000130808001300100093001000D8
:10001000130110009301100013021000930210004E
:100020001303100093031000130410009304100036
:10003000130510009305100013061000930610001E
:1000400013071000930710009390F00163C40000A1
:10005000930000001311F10163440100130100003B
:100060009391F10163C40100930100001312F201A6
:1000700063440200130200009392F20163C4020081
:10008000930200001313F301634403001303000001
:100090009393F30163C40300930300001314F4016A
:1000A00063440400130400009394F40163C4040047
:1000B000930400001315F5016344050013050000C7
:1000C0009395F50163C40500930500001316F6012E
:1000D00063440600130600009396F60163C406000D
:1000E000930600001317F70163440700130700008D
:1000F0009397F70163C407009307000023200800CB
:10010000232218002324280023263800232848000F
:10011000232A5800232C6800232E780023208802ED
:10012000232298022324A8022326B8022328C802E7
:10013000232AD802232CE802232EF802971000006D
:10014000938040F01308100093081000130910006A
:1001500093091000130A1000930A1000130B1000EB
:10016000930B1000130C1000930C1000130D1000D3
:10017000930D1000130E1000930E1000130F1000BB
:10018000930F10001318F8016344080013080000CF
:100190009398F80163C40800930800001319F9014B
:1001A00063440900130900009399F90163C409002D
:1001B00093090000131AFA0163440A00130A0000AD
:1001C000939AFA0163C40A00930A0000131BFB010F
:1001D00063440B00130B0000939BFB0163C40B00F3
:1001E000930B0000131CFC0163440C00130C000073
:1001F000939CFC0163C40C00930C0000131DFD01D3
:1002000063440D00130D0000939DFD0163C40D00B8
:10021000930D0000131EFE0163440E00130E000038
:10022000939EFE0163C40E00930E0000131FFF0196
:1002300063440F00130F0000939FFF0163C40F007E
:10024000930F000023A0000123A2100123A420018A
:1002500023A6300123A8400123AA500123AC60014A
:1002600023AE700123A0800323A2900323A4A00344
:1002700023A6B00323A8C00323AAD00323ACE00322
:1002800023AEF003171500001305C5D7971500001E
:10029000938545DF370610F01306C6F26306B502F4
:1002A0008326C5002320D600832685002320D60080
:1002B000832645002320D600832605002320D60070
:1002C000130505016FF09FFD370510F0130505F2CA
:0402D00023200500E2
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,29 @@
:0200000480007A
:10000000971F0000938F0F0137E0CDAB1300100056
:100010001360007F1370F0531340308013105000B2
:10002000135020401350400023A00F00971F0000E2
:10003000938F8FFE930010001301007F9301F05304
:1000400013023080930250001303200093034000FA
:100050001304800117E0CDAB3300100033602000A3
:100060003370300033404000331050003350604054
:10007000335070003300804023A00F00971F000012
:10008000938FCFF9930010001301200033A02000BC
:1000900023A00F0033B0200023A20F0013A02000E4
:1000A00023A40F0013B0200023A60F00971F000009
:1000B000938FCFF76F00400023A00F009700000040
:1000C0009380C0006780000023A20F0097100000FB
:1000D000938040F3971F0000938FCFF503A000009B
:1000E00023A00F000390000023A20F000380000054
:1000F00023A40F0003C0000023A60F001715000063
:10010000130545F1971500009385C5F3370610F0E8
:100110001306C6F26306B5028326C5002320D60067
:10012000832685002320D600832645002320D60081
:10013000832605002320D600130505016FF09FFDDF
:10014000370510F0130505F223200500000000001C
:0401500000000000AB
:101000004F4E5242000000000000000000000000AF
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,45 @@
:0200000480007A
:100000009710000093800001B7CFAAAA938FBFBBBF
:1000100023A0F00137F1F1111301212223802000E8
:1000200097120000938252FFA3AF02FEB74C33F346
:10003000938C4C4FA38F92FF171400001304F4FD10
:10004000A3200400B7FFF555938F6F66A300F4015A
:10005000971500009385C57C23A00580379677F718
:100060001306868F2380C580170700001307977B30
:10007000A32F077EB71709999387A7AAA30FF77E27
:1000800097180000938888FA371911111309C910BD
:10009000B72922229389C92C373A3333130ABA3B42
:1000A000B74A4444938ABA40375B5555130BEB5E0D
:1000B000B76B6666938BEB60377C7777130CDC70DD
:1000C000B79C8888938CDC8D37AD9999130D0D9F63
:1000D000B7BDAAAA938D0DA037CEBBBB130EFEBF32
:1000E000B7DECCCC938EFEC0238E28FFA38E38FFC4
:1000F000238F48FFA38F58FF23806801A3807801D6
:1001000023818801A38198012382A801A382B801D9
:100110002383C801A383D801171B0000130B8BF1A5
:10012000B74065879380103223201B00375034126C
:100130001300806723000B00971A0000938A8AEC53
:1001400083A00A0023A00000B73922119389493403
:1001500083AB0A0023803B01971B0000938BCBEA03
:10016000171C0000130C8CED23200C0083AC0B003B
:1001700023009C01171D0000130D8DEC23200D00A2
:10018000B73C5476938C0C2123009D01930C000006
:10019000171E0000130E0EEB23200E00B7DDAB89F7
:1001A000938DFDDE2300BE01130ECEFF971E0000CF
:1001B000938E8EE923A00E0023A20E00B76D721459
:1001C000938D6D832380BE0103AF0E002382EE0169
:1001D000971000009380C0E723A0000037513896A5
:1001E00013011120B751812593813196238020007E
:1001F00023803000171500001305C5E19715000096
:10020000938545E5370610F01306C6F26306B5027E
:100210008326C5002320D600832685002320D60010
:10022000832645002320D600832605002320D60000
:10023000130505016FF09FFD370510F0130505F25A
:040240002320050072
:1010000034100080F0DEBC9A0000000000000000F8
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,41 @@
:0200000480007A
:100000009710000093800001B7CFAAAA938FBFBBBF
:1000100023A0F00137F1F1111301212223902000D8
:1000200097120000938252FFA3AF02FEB74C33F346
:10003000938C4C4FA39F92FF171400001304F4FD00
:10004000A3200400B7FFF555938F6F66A310F4014A
:10005000971500009385C57C23A00580379677F718
:100060001306868F2390C580170700001307977B20
:10007000A32F077EB71709999387A7AAA31FF77E17
:1000800097180000938888FA37D911111309C9C04D
:10009000B71922229389B9BB371A3333130AEAEE10
:1000A000B7EA4444938ADAD0370B7777130B0B0FF8
:1000B000B71B6666938BFBFF239E28FF239F38FFA9
:1000C00023904801239158012392680123937801DA
:1000D000171B0000130B0BF6B74065879380103297
:1000E00023201B00375034121300806723100B00AD
:1000F000971A0000938A0AF183A00A0023A0000047
:10010000B73922119389493483AB0A0023903B010C
:10011000971B0000938B4BEF171C0000130C0CF285
:1001200023200C0083AC0B0023109C01171D000042
:10013000130D0DF123200D00B73C5476938C0C2148
:1001400023109D01930C0000171E0000130E8EEF6C
:1001500023200E00B7DDAB89938DFDDE2310BE0199
:10016000130ECEFF971E0000938E0EEE23A00E00FE
:1001700023A20E00B76D7214938D6D832390BE0180
:1001800003AF0E002392EE0197100000938040EC25
:1001900023A000003751389613011120B751812553
:1001A0009381319623902000239030001715000092
:1001B000130545E6971500009385C5E9370610F04D
:1001C0001306C6F26306B5028326C5002320D600B7
:1001D000832685002320D600832645002320D600D1
:1001E000832605002320D600130505016FF09FFD2F
:1001F000370510F0130505F223200500000000006C
:0402000000000000FA
:1010000034100080F0DEBC9A0000000000000000F8
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,64 @@
:0200000480007A
:100000009710000093800000171100001301810277
:1000100083A10000130210009302F0001303F0010B
:10002000930300001304000133924100B392510086
:1000300033936100B3937100339481002320310026
:10004000232241002324510023266100232871002C
:10005000232A810097100000938000FB17110000F5
:100060001301C1FE03A40000930410001305F00067
:100070009305F0011306000093060001B3149400E9
:100080003315A400B315B4003316C400B316D4005E
:1000900023208100232291002324A1002326B100E4
:1000A0002328C100232AD10097100000938000F676
:1000B00017110000130101FB83A6000013071000B5
:1000C0009307F0001308F0019308000013090001E2
:1000D0003397E600B397F60033980601B3981601FC
:1000E000339926012320D1002322E1002324F100AB
:1000F0002326010123281101232A210117160000BC
:10010000130606F197160000938646F703290600AA
:1001100093091000130AF000930AF001130B00007A
:10012000930B0001B3193901331A4901B31A59016C
:10013000331B6901B31B790123A0260123A23601D9
:1001400023A4460123A6560123A8660123AA76010B
:1001500017160000130606EC97160000938686F328
:10016000832B0600130C1000930CF000130DF0010C
:10017000930D0000130E0001339C8B01B39C9B0177
:10018000339DAB01B39DBB01339ECB0123A0760110
:1001900023A2860123A4960123A6A60123A8B601C3
:1001A00023AAC601971C0000938C0CE7171D0000C2
:1001B000130DCDEF03AE0C00930D1000B31EBE0166
:1001C000339FBE01B31FBF01B390BF013391B00194
:1001D000B311B1012320CD012322DD012324ED0140
:1001E0002326FD0123281D00232A2D00232C3D005A
:1001F00097100000938080E2171100001301C1ECFA
:1002000083A20000930D10003390B201232001005F
:10021000971000009380C0E017110000130101EB5C
:1002200083A20000930D10003390B201B312B0010D
:10023000232001002322510097100000938080DECC
:1002400017110000130101E983A10000370200101B
:10025000130202FEB7020010938212FE3703001051
:100260001303F3FEB70300109383F3FF33924100AF
:10027000B392510033936100B39371002320410086
:10028000232251002324610023267100171500004A
:10029000130545DA971500009385C5E4370610F07D
:1002A0001306C6F26306B5028326C5002320D600D6
:1002B000832685002320D600832645002320D600F0
:1002C000832605002320D600130505016FF09FFD4E
:1002D000370510F0130505F223200500000000008B
:0402E000000000001A
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008010EFCDAB7856341298BADCFE99
:101020002143658700000000000000000000000070
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:040000058000000077
:00000001FF

View File

@@ -0,0 +1,50 @@
:0200000480007A
:100000009710000093800000171100001301810178
:1000100083A10000139211009392F1001393F10158
:100020009393010013940101232031002322410006
:10003000232451002326610023287100232A8100F4
:1000400097100000938040FC17110000130101FF7E
:1000500003A40000931414001315F4009315F40185
:10006000131604009316040123208100232291001B
:100070002324A1002326B1002328C100232AD10074
:1000800097100000938080F817110000130181FC85
:1000900083A60000139716009397F6001398F601B5
:1000A00093980600139906012320D1002322E10032
:1000B0002324F1002326010123281101232A2101F1
:1000C000171600001306C6F497160000938606FA6A
:1000D0000329060093191900131AF900931AF9015C
:1000E000131B0900931B090123A0260123A236013B
:1000F00023A4460123A6560123A8660123AA76015C
:1001000017160000130606F197160000938686F76F
:10011000832B0600139C1B00939CFB00139DFB018B
:10012000939D0B00139E0B0123A0760123A2860151
:1001300023A4960123A6A60123A8B60123AAC601DB
:10014000171D0000130D4DED971D0000938D0DF54B
:10015000032E0D00931E1E00139F1E00931F1F00F1
:1001600093901F00139110009311110023A0CD0153
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
:1001800023AA2D0023AC3D0097100000938000E9C6
:1001900017110000130141F283A200001390120016
:1001A0002320010097100000938080E717110000C2
:1001B0001301C1F083A200001390120093121000EB
:1001C000232001002322510017150000130585E5A7
:1001D00097150000938505EF370610F01306C6F259
:1001E0006306B5028326C5002320D600832685003A
:1001F0002320D600832645002320D6008326050031
:100200002320D600130505016FF09FFD370510F080
:10021000130505F223200500000000000000000087
:0402200000000000DA
:101000000000000001000000FFFFFFFFFFFFFF7F67
:101010000000008010EFCDAB7856341298BADCFE99
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:040000058000000077
:00000001FF

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