mirror of
https://github.com/cecio/USBvalve.git
synced 2025-12-06 03:41:45 +00:00
First blood
This commit is contained in:
BIN
PCB/Gerber_USBvalve_PCB_2023-03-04.zip
Normal file
BIN
PCB/Gerber_USBvalve_PCB_2023-03-04.zip
Normal file
Binary file not shown.
BIN
firmware/USBvalve-0.6.2-32.uf2
Normal file
BIN
firmware/USBvalve-0.6.2-32.uf2
Normal file
Binary file not shown.
BIN
firmware/USBvalve-0.6.2-64.uf2
Normal file
BIN
firmware/USBvalve-0.6.2-64.uf2
Normal file
Binary file not shown.
BIN
firmware/reset/Blink_nano.ino.elf.uf2
Normal file
BIN
firmware/reset/Blink_nano.ino.elf.uf2
Normal file
Binary file not shown.
BIN
firmware/reset/Blink_pico.ino.elf.uf2
Normal file
BIN
firmware/reset/Blink_pico.ino.elf.uf2
Normal file
Binary file not shown.
289
src/USBvalve.ino
Normal file
289
src/USBvalve.ino
Normal file
@@ -0,0 +1,289 @@
|
||||
/*
|
||||
USBvalve
|
||||
|
||||
written by Cesare Pizzi
|
||||
This project extensively reuse code doen by Adafruit. Please support them!
|
||||
*/
|
||||
|
||||
/*********************************************************************
|
||||
Adafruit invests time and resources providing this open source code,
|
||||
please support Adafruit and open-source hardware by purchasing
|
||||
products from Adafruit!
|
||||
|
||||
MIT license, check LICENSE for more information
|
||||
Copyright (c) 2019 Ha Thach for Adafruit Industries
|
||||
All text above, and the splash screen below must be included in
|
||||
any redistribution
|
||||
*********************************************************************/
|
||||
|
||||
#include "Adafruit_TinyUSB.h"
|
||||
#include "SSD1306AsciiWire.h"
|
||||
|
||||
// Define vars for OLED screen
|
||||
#define I2C_ADDRESS 0x3C // 0X3C+SA0 - 0x3C or 0x3D
|
||||
#define RST_PIN -1 // Define proper RST_PIN if required.
|
||||
#define OLED_HEIGHT 64 // 64 or 32 depending on the OLED
|
||||
#define OLED_LINES (OLED_HEIGHT / 8)
|
||||
SSD1306AsciiWire oled;
|
||||
|
||||
// Define the dimension of RAM DISK. We have a "real" one (for which
|
||||
// a real array is created) and a "fake" one, presented to the OS
|
||||
#define DISK_BLOCK_NUM 0x150
|
||||
#define FAKE_DISK_BLOCK_NUM 0x800
|
||||
#define DISK_BLOCK_SIZE 0x200
|
||||
#include "ramdisk.h"
|
||||
#include "quark.h"
|
||||
|
||||
Adafruit_USBD_MSC usb_msc;
|
||||
|
||||
// Eject button to demonstrate medium is not ready e.g SDCard is not present
|
||||
// whenever this button is pressed and hold, it will report to host as not ready
|
||||
#if defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(ARDUINO_NRF52840_CIRCUITPLAY)
|
||||
#define BTN_EJECT 4 // Left Button
|
||||
bool activeState = true;
|
||||
|
||||
#elif defined(ARDUINO_FUNHOUSE_ESP32S2)
|
||||
#define BTN_EJECT BUTTON_DOWN
|
||||
bool activeState = true;
|
||||
|
||||
#elif defined PIN_BUTTON1
|
||||
#define BTN_EJECT PIN_BUTTON1
|
||||
bool activeState = false;
|
||||
#endif
|
||||
|
||||
//
|
||||
// USBvalve globals
|
||||
//
|
||||
#define VERSION "USBvalve - 0.6.2"
|
||||
boolean readme = false;
|
||||
boolean autorun = false;
|
||||
boolean written = false;
|
||||
boolean written_reported = false;
|
||||
int x = 2;
|
||||
|
||||
#define BLOCK_AUTORUN 102 // Block where Autorun.inf file is saved
|
||||
#define BLOCK_README 100 // Block where README.txt file is saved
|
||||
#define MAX_DUMP_BYTES 16 // Used by the dump of the debug facility: do not increase this too much
|
||||
#define BYTES_TO_HASH 512 * 10 // Number of bytes of the RAM disk used to check consistency (first 10 blocks)
|
||||
|
||||
// Burned hash to check consistency
|
||||
u8 valid_hash[WIDTH] = {
|
||||
0x44, 0x3B, 0xB1, 0x03, 0x2F, 0x67, 0x47, 0x83,
|
||||
0x81, 0xFA, 0x3D, 0x04, 0x4B, 0x9D, 0x24, 0xCD,
|
||||
0x82, 0x48, 0x7D, 0x21, 0x6E, 0x16, 0x45, 0x43,
|
||||
0x45, 0x05, 0xF6, 0xDF, 0x02, 0x9A, 0x62, 0x1A,
|
||||
0x26, 0x81, 0xF2, 0xB5, 0xED, 0xEC, 0x38, 0x07,
|
||||
0x2A, 0x1F, 0xAF, 0x5A, 0x95, 0x0D, 0x14, 0xE4
|
||||
};
|
||||
|
||||
u8 computed_hash[WIDTH] = { 0x00 };
|
||||
|
||||
void setup() {
|
||||
// Screen Init
|
||||
Wire.begin();
|
||||
Wire.setClock(400000L);
|
||||
#if OLED_HEIGHT == 64
|
||||
#if RST_PIN >= 0
|
||||
oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
|
||||
#else
|
||||
oled.begin(&Adafruit128x64, I2C_ADDRESS);
|
||||
#endif
|
||||
#else
|
||||
#if RST_PIN >= 0
|
||||
oled.begin(&Adafruit128x32, I2C_ADDRESS, RST_PIN);
|
||||
#else
|
||||
oled.begin(&Adafruit128x32, I2C_ADDRESS);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
oled.setFont(Adafruit5x7);
|
||||
cls(); // Clear display
|
||||
|
||||
// Check consistency of RAM FS
|
||||
quark(computed_hash, msc_disk[0], BYTES_TO_HASH);
|
||||
if (memcmp(computed_hash, valid_hash, WIDTH) == 0) {
|
||||
oled.println("[+] Selftest: OK");
|
||||
x++;
|
||||
} else {
|
||||
oled.println("[!] Selftest: KO");
|
||||
oled.println("[!] Stopping...");
|
||||
while (1) {
|
||||
delay(1000); // Loop forever
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_RP2040)
|
||||
// Manual begin() is required on core without built-in support for TinyUSB such as
|
||||
// - mbed rp2040
|
||||
TinyUSB_Device_Init(0);
|
||||
#endif
|
||||
|
||||
// Set disk vendor id, product id and revision with string up to 8, 16, 4 characters respectively
|
||||
usb_msc.setID("Watchdog", "USBvalve", "0.1");
|
||||
|
||||
// Set disk size (using the "fake" size)
|
||||
usb_msc.setCapacity(FAKE_DISK_BLOCK_NUM, DISK_BLOCK_SIZE);
|
||||
|
||||
// Set the callback functions
|
||||
usb_msc.setReadWriteCallback(msc_read_callback, msc_write_callback, msc_flush_callback);
|
||||
|
||||
// Set Lun ready (RAM disk is always ready)
|
||||
usb_msc.setUnitReady(true);
|
||||
|
||||
#ifdef BTN_EJECT
|
||||
pinMode(BTN_EJECT, activeState ? INPUT_PULLDOWN : INPUT_PULLUP);
|
||||
usb_msc.setReadyCallback(msc_ready_callback);
|
||||
#endif
|
||||
|
||||
usb_msc.begin();
|
||||
}
|
||||
|
||||
// Main loop, managing display
|
||||
void loop() {
|
||||
|
||||
if (readme == true) {
|
||||
if (x == OLED_LINES) cls();
|
||||
oled.println("[!] README (R)");
|
||||
x++;
|
||||
readme = false;
|
||||
}
|
||||
|
||||
if (autorun == true) {
|
||||
if (x == OLED_LINES) cls();
|
||||
oled.println("[+] AUTORUN (R)");
|
||||
x++;
|
||||
autorun = false;
|
||||
}
|
||||
|
||||
if (written == true && written_reported == false) {
|
||||
if (x == OLED_LINES) cls();
|
||||
oled.println("[!] WRITING");
|
||||
x++;
|
||||
written = false;
|
||||
written_reported = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Callback invoked when received READ10 command.
|
||||
// Copy disk's data to buffer (up to bufsize) and
|
||||
// return number of copied bytes (must be multiple of block size).
|
||||
// This happens only for the "real" size of disk
|
||||
int32_t msc_read_callback(uint32_t lba, void* buffer, uint32_t bufsize) {
|
||||
|
||||
// Check for README.TXT
|
||||
if (lba == BLOCK_README) {
|
||||
readme = true;
|
||||
}
|
||||
|
||||
// Check for AUTORUN.INF
|
||||
if (lba == BLOCK_AUTORUN) {
|
||||
autorun = true;
|
||||
}
|
||||
|
||||
// We are declaring a bigger size than what is actually allocated, so
|
||||
// this is protecting our memory integrity
|
||||
if (lba < DISK_BLOCK_NUM - 1) {
|
||||
uint8_t const* addr = msc_disk[lba];
|
||||
memcpy(buffer, addr, bufsize);
|
||||
}
|
||||
|
||||
SerialTinyUSB.print("Read LBA: ");
|
||||
SerialTinyUSB.print(lba);
|
||||
SerialTinyUSB.print(" Size: ");
|
||||
SerialTinyUSB.println(bufsize);
|
||||
if (lba < DISK_BLOCK_NUM - 1) {
|
||||
hexDump(msc_disk[lba], MAX_DUMP_BYTES);
|
||||
}
|
||||
SerialTinyUSB.flush();
|
||||
|
||||
return bufsize;
|
||||
}
|
||||
|
||||
// Callback invoked when received WRITE10 command.
|
||||
// Process data in buffer to disk's storage and
|
||||
// return number of written bytes (must be multiple of block size).
|
||||
// This happens only for the "real" size of disk
|
||||
int32_t msc_write_callback(uint32_t lba, uint8_t* buffer, uint32_t bufsize) {
|
||||
|
||||
// This check for writing of space. The LBA > 10 is set to avoid some
|
||||
// false positives
|
||||
if (lba > 10) {
|
||||
written = true;
|
||||
}
|
||||
// We are declaring a bigger size than what is actually allocated, so
|
||||
// this is protecting our memory integrity
|
||||
if (lba < DISK_BLOCK_NUM - 1) {
|
||||
uint8_t* addr = msc_disk[lba];
|
||||
memcpy(addr, buffer, bufsize);
|
||||
}
|
||||
|
||||
SerialTinyUSB.print("Write LBA: ");
|
||||
SerialTinyUSB.print(lba);
|
||||
SerialTinyUSB.print(" Size: ");
|
||||
SerialTinyUSB.println(bufsize);
|
||||
if (lba < DISK_BLOCK_NUM - 1) {
|
||||
hexDump(msc_disk[lba], MAX_DUMP_BYTES);
|
||||
}
|
||||
SerialTinyUSB.flush();
|
||||
|
||||
return bufsize;
|
||||
}
|
||||
|
||||
// Callback invoked when WRITE10 command is completed (status received and accepted by host).
|
||||
// used to flush any pending cache.
|
||||
void msc_flush_callback(void) {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
#ifdef BTN_EJECT
|
||||
// Invoked when received Test Unit Ready command.
|
||||
// return true allowing host to read/write this LUN e.g SD card inserted
|
||||
bool msc_ready_callback(void) {
|
||||
// button not active --> medium ready
|
||||
return digitalRead(BTN_EJECT) != activeState;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Clear display
|
||||
void cls(void) {
|
||||
oled.clear();
|
||||
oled.println(VERSION);
|
||||
oled.println("----------------");
|
||||
x = 2;
|
||||
}
|
||||
|
||||
// HexDump
|
||||
void hexDump(unsigned char* data, size_t size) {
|
||||
char asciitab[17];
|
||||
size_t i, j;
|
||||
asciitab[16] = '\0';
|
||||
|
||||
for (i = 0; i < size; ++i) {
|
||||
|
||||
SerialTinyUSB.print(data[i] >> 4, HEX);
|
||||
SerialTinyUSB.print(data[i] & 0x0F, HEX);
|
||||
|
||||
if ((data)[i] >= ' ' && (data)[i] <= '~') {
|
||||
asciitab[i % 16] = (data)[i];
|
||||
} else {
|
||||
asciitab[i % 16] = '.';
|
||||
}
|
||||
if ((i + 1) % 8 == 0 || i + 1 == size) {
|
||||
SerialTinyUSB.print(" ");
|
||||
if ((i + 1) % 16 == 0) {
|
||||
SerialTinyUSB.println(asciitab);
|
||||
} else if (i + 1 == size) {
|
||||
asciitab[(i + 1) % 16] = '\0';
|
||||
if ((i + 1) % 16 <= 8) {
|
||||
SerialTinyUSB.print(" ");
|
||||
}
|
||||
for (j = (i + 1) % 16; j < 16; ++j) {
|
||||
SerialTinyUSB.print(" ");
|
||||
}
|
||||
SerialTinyUSB.print("| ");
|
||||
SerialTinyUSB.println(asciitab);
|
||||
}
|
||||
}
|
||||
}
|
||||
SerialTinyUSB.println();
|
||||
}
|
||||
484
src/quark.c
Normal file
484
src/quark.c
Normal file
@@ -0,0 +1,484 @@
|
||||
/*
|
||||
USBvalve
|
||||
*/
|
||||
|
||||
/*
|
||||
Quark reference C implementation
|
||||
|
||||
Copyright (c) 2010-2014 Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
|
||||
|
||||
To the extent possible under law, the author(s) have dedicated all copyright
|
||||
and related and neighboring rights to this software to the public domain
|
||||
worldwide. This software is distributed without any warranty.
|
||||
|
||||
You should have received a copy of the CC0 Public Domain Dedication along with
|
||||
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "quark.h"
|
||||
|
||||
#define DIGEST WIDTH
|
||||
|
||||
typedef uint64_t u64;
|
||||
typedef uint32_t u32;
|
||||
typedef uint8_t u8;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int pos; /* number of bytes read into x from current block */
|
||||
u32 x[WIDTH * 8]; /* one bit stored in each word */
|
||||
} hashState;
|
||||
|
||||
|
||||
#if defined(UQUARK)
|
||||
/* 17 bytes */
|
||||
u8 iv[] = { 0xd8, 0xda, 0xca, 0x44, 0x41, 0x4a, 0x09, 0x97,
|
||||
0x19, 0xc8, 0x0a, 0xa3, 0xaf, 0x06, 0x56, 0x44, 0xdb };
|
||||
#elif defined(DQUARK)
|
||||
/* 22 bytes */
|
||||
u8 iv[] = { 0xcc, 0x6c, 0x4a, 0xb7, 0xd1, 0x1f, 0xa9, 0xbd,
|
||||
0xf6, 0xee, 0xde, 0x03, 0xd8, 0x7b, 0x68, 0xf9,
|
||||
0x1b, 0xaa, 0x70, 0x6c, 0x20, 0xe9 };
|
||||
#elif defined(SQUARK)
|
||||
/* 32 bytes */
|
||||
u8 iv[] = { 0x39, 0x72, 0x51, 0xce, 0xe1, 0xde, 0x8a, 0xa7,
|
||||
0x3e, 0xa2, 0x62, 0x50, 0xc6, 0xd7, 0xbe, 0x12,
|
||||
0x8c, 0xd3, 0xe7, 0x9d, 0xd7, 0x18, 0xc2, 0x4b,
|
||||
0x8a, 0x19, 0xd0, 0x9c, 0x24, 0x92, 0xda, 0x5d };
|
||||
#elif defined(CQUARK)
|
||||
/* 48 bytes */
|
||||
u8 iv[] = { 0x3b, 0x45, 0x03, 0xec, 0x76, 0x62, 0xc3, 0xcb,
|
||||
0x30, 0xe0, 0x08, 0x37, 0xec, 0x8d, 0x38, 0xbb,
|
||||
0xe5, 0xff, 0x5a, 0xcd, 0x69, 0x01, 0xa2, 0x49,
|
||||
0x57, 0x50, 0xf9, 0x19, 0x8e, 0x2e, 0x3b, 0x58,
|
||||
0x52, 0xdc, 0xaa, 0x16, 0x62, 0xb7, 0xda, 0xd6,
|
||||
0x5f, 0xcb, 0x5a, 0x8a, 0x1f, 0x0d, 0x5f, 0xcc };
|
||||
#endif
|
||||
|
||||
void showstate(u32 *x) {
|
||||
|
||||
int i;
|
||||
u8 buf = 0;
|
||||
|
||||
for (i = 0; i < 8 * WIDTH; ++i) {
|
||||
buf ^= (1 & x[i]) << (7 - (i % 8));
|
||||
|
||||
if (((i % 8) == 7) && (i)) {
|
||||
printf("%02x", buf);
|
||||
buf = 0;
|
||||
}
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
int permute_u(u32 *x) {
|
||||
/* state of 136=2x68 bits */
|
||||
#define ROUNDS_U 4 * 136
|
||||
#define N_LEN_U 68
|
||||
#define L_LEN_U 10
|
||||
|
||||
u32 *X, *Y, *L;
|
||||
u32 h;
|
||||
int i;
|
||||
|
||||
X = (u32 *)malloc((N_LEN_U + ROUNDS_U) * sizeof(u32));
|
||||
Y = (u32 *)malloc((N_LEN_U + ROUNDS_U) * sizeof(u32));
|
||||
L = (u32 *)malloc((L_LEN_U + ROUNDS_U) * sizeof(u32));
|
||||
|
||||
/* local copy of the state in the registers*/
|
||||
for (i = 0; i < N_LEN_U; ++i) {
|
||||
X[i] = x[i];
|
||||
Y[i] = x[i + N_LEN_U];
|
||||
}
|
||||
|
||||
/* initialize the LFSR to 11..11 */
|
||||
for (i = 0; i < L_LEN_U; ++i)
|
||||
L[i] = 0xFFFFFFFF;
|
||||
|
||||
/* iterate rounds */
|
||||
for (i = 0; i < ROUNDS_U; ++i) {
|
||||
|
||||
/* indices up to i+59, for 8x parallelizibility*/
|
||||
|
||||
/* need X[i] as linear term only, for invertibility */
|
||||
X[N_LEN_U + i] = X[i] ^ Y[i];
|
||||
X[N_LEN_U + i] ^= X[i + 9] ^ X[i + 14] ^ X[i + 21] ^ X[i + 28] ^ X[i + 33] ^ X[i + 37] ^ X[i + 45] ^ X[i + 52] ^ X[i + 55] ^ X[i + 50] ^ (X[i + 59] & X[i + 55]) ^ (X[i + 37] & X[i + 33]) ^ (X[i + 15] & X[i + 9]) ^ (X[i + 55] & X[i + 52] & X[i + 45]) ^ (X[i + 33] & X[i + 28] & X[i + 21]) ^ (X[i + 59] & X[i + 45] & X[i + 28] & X[i + 9]) ^ (X[i + 55] & X[i + 52] & X[i + 37] & X[i + 33]) ^ (X[i + 59] & X[i + 55] & X[i + 21] & X[i + 15]) ^ (X[i + 59] & X[i + 55] & X[i + 52] & X[i + 45] & X[i + 37]) ^ (X[i + 33] & X[i + 28] & X[i + 21] & X[i + 15] & X[i + 9]) ^ (X[i + 52] & X[i + 45] & X[i + 37] & X[i + 33] & X[i + 28] & X[i + 21]);
|
||||
|
||||
/* need Y[i] as linear term only, for invertibility */
|
||||
Y[N_LEN_U + i] = Y[i];
|
||||
Y[N_LEN_U + i] ^= Y[i + 7] ^ Y[i + 16] ^ Y[i + 20] ^ Y[i + 30] ^ Y[i + 35] ^ Y[i + 37] ^ Y[i + 42] ^ Y[i + 51] ^ Y[i + 54] ^ Y[i + 49] ^ (Y[i + 58] & Y[i + 54]) ^ (Y[i + 37] & Y[i + 35]) ^ (Y[i + 15] & Y[i + 7]) ^ (Y[i + 54] & Y[i + 51] & Y[i + 42]) ^ (Y[i + 35] & Y[i + 30] & Y[i + 20]) ^ (Y[i + 58] & Y[i + 42] & Y[i + 30] & Y[i + 7]) ^ (Y[i + 54] & Y[i + 51] & Y[i + 37] & Y[i + 35]) ^ (Y[i + 58] & Y[i + 54] & Y[i + 20] & Y[i + 15]) ^ (Y[i + 58] & Y[i + 54] & Y[i + 51] & Y[i + 42] & Y[i + 37]) ^ (Y[i + 35] & Y[i + 30] & Y[i + 20] & Y[i + 15] & Y[i + 7]) ^ (Y[i + 51] & Y[i + 42] & Y[i + 37] & Y[i + 35] & Y[i + 30] & Y[i + 20]);
|
||||
|
||||
/* need L[i] as linear term only, for invertibility */
|
||||
L[L_LEN_U + i] = L[i];
|
||||
L[L_LEN_U + i] ^= L[i + 3];
|
||||
|
||||
/* compute output of the h function */
|
||||
h = X[i + 25] ^ Y[i + 59] ^ (Y[i + 3] & X[i + 55]) ^ (X[i + 46] & X[i + 55]) ^ (X[i + 55] & Y[i + 59]) ^ (Y[i + 3] & X[i + 25] & X[i + 46]) ^ (Y[i + 3] & X[i + 46] & X[i + 55]) ^ (Y[i + 3] & X[i + 46] & Y[i + 59]) ^ (X[i + 25] & X[i + 46] & Y[i + 59] & L[i]) ^ (X[i + 25] & L[i]);
|
||||
h ^= X[i + 1] ^ Y[i + 2] ^ X[i + 4] ^ Y[i + 10] ^ X[i + 31] ^ Y[i + 43] ^ X[i + 56] ^ L[i];
|
||||
|
||||
/* feedback of h into the registers */
|
||||
X[N_LEN_U + i] ^= h;
|
||||
Y[N_LEN_U + i] ^= h;
|
||||
}
|
||||
|
||||
/* copy final state into hashState */
|
||||
for (i = 0; i < N_LEN_U; ++i) {
|
||||
x[i] = X[ROUNDS_U + i];
|
||||
x[i + N_LEN_U] = Y[ROUNDS_U + i];
|
||||
}
|
||||
|
||||
free(X);
|
||||
free(Y);
|
||||
free(L);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int permute_d(u32 *x) {
|
||||
/* state of 176=2x88 bits */
|
||||
#define ROUNDS_D 4 * 176
|
||||
#define N_LEN_D 88
|
||||
#define L_LEN_D 10
|
||||
|
||||
u32 *X, *Y, *L;
|
||||
u32 h;
|
||||
int i;
|
||||
|
||||
X = (u32 *)malloc((N_LEN_D + ROUNDS_D) * sizeof(u32));
|
||||
Y = (u32 *)malloc((N_LEN_D + ROUNDS_D) * sizeof(u32));
|
||||
L = (u32 *)malloc((L_LEN_D + ROUNDS_D) * sizeof(u32));
|
||||
|
||||
/* local copy of the state in the registers*/
|
||||
for (i = 0; i < N_LEN_D; ++i) {
|
||||
X[i] = x[i];
|
||||
Y[i] = x[i + N_LEN_D];
|
||||
}
|
||||
|
||||
/* initialize the LFSR to 11..11 */
|
||||
for (i = 0; i < L_LEN_D; ++i)
|
||||
L[i] = 0xFFFFFFFF;
|
||||
|
||||
/* iterate rounds */
|
||||
for (i = 0; i < ROUNDS_D; ++i) {
|
||||
|
||||
/* need X[i] as linear term only, for invertibility */
|
||||
X[N_LEN_D + i] = X[i] ^ Y[i];
|
||||
X[N_LEN_D + i] ^= X[i + 11] ^ X[i + 18] ^ X[i + 27] ^ X[i + 36] ^ X[i + 42] ^ X[i + 47] ^ X[i + 58] ^ X[i + 67] ^ X[i + 71] ^ X[i + 64] ^ (X[i + 79] & X[i + 71]) ^ (X[i + 47] & X[i + 42]) ^ (X[i + 19] & X[i + 11]) ^ (X[i + 71] & X[i + 67] & X[i + 58]) ^ (X[i + 42] & X[i + 36] & X[i + 27]) ^ (X[i + 79] & X[i + 58] & X[i + 36] & X[i + 11]) ^ (X[i + 71] & X[i + 67] & X[i + 47] & X[i + 42]) ^ (X[i + 79] & X[i + 71] & X[i + 27] & X[i + 19]) ^ (X[i + 79] & X[i + 71] & X[i + 67] & X[i + 58] & X[i + 47]) ^ (X[i + 42] & X[i + 36] & X[i + 27] & X[i + 19] & X[i + 11]) ^ (X[i + 67] & X[i + 58] & X[i + 47] & X[i + 42] & X[i + 36] & X[i + 27]);
|
||||
|
||||
|
||||
/* need Y[i] as linear term only, for invertibility */
|
||||
Y[N_LEN_D + i] = Y[i];
|
||||
Y[N_LEN_D + i] ^= Y[i + 9] ^ Y[i + 20] ^ Y[i + 25] ^ Y[i + 38] ^ Y[i + 44] ^ Y[i + 47] ^ Y[i + 54] ^ Y[i + 67] ^ Y[i + 69] ^ Y[i + 63] ^ (Y[i + 78] & Y[i + 69]) ^ (Y[i + 47] & Y[i + 44]) ^ (Y[i + 19] & Y[i + 9]) ^ (Y[i + 69] & Y[i + 67] & Y[i + 54]) ^ (Y[i + 44] & Y[i + 38] & Y[i + 25]) ^ (Y[i + 78] & Y[i + 54] & Y[i + 38] & Y[i + 9]) ^ (Y[i + 69] & Y[i + 67] & Y[i + 47] & Y[i + 44]) ^ (Y[i + 78] & Y[i + 69] & Y[i + 25] & Y[i + 19]) ^ (Y[i + 78] & Y[i + 69] & Y[i + 67] & Y[i + 54] & Y[i + 47]) ^ (Y[i + 44] & Y[i + 38] & Y[i + 25] & Y[i + 19] & Y[i + 9]) ^ (Y[i + 67] & Y[i + 54] & Y[i + 47] & Y[i + 44] & Y[i + 38] & Y[i + 25]);
|
||||
|
||||
/* need L[i] as linear term only, for invertibility */
|
||||
L[L_LEN_D + i] = L[i];
|
||||
L[L_LEN_D + i] ^= L[i + 3]; // linear feedback here
|
||||
|
||||
/* compute output of the h function */
|
||||
h = X[i + 35] ^ Y[i + 79] ^ (Y[i + 4] & X[i + 68]) ^ (X[i + 57] & X[i + 68]) ^ (X[i + 68] & Y[i + 79]) ^ (Y[i + 4] & X[i + 35] & X[i + 57]) ^ (Y[i + 4] & X[i + 57] & X[i + 68]) ^ (Y[i + 4] & X[i + 57] & Y[i + 79]) ^ (X[i + 35] & X[i + 57] & Y[i + 79] & L[i]) ^ (X[i + 35] & L[i]);
|
||||
h ^= X[i + 1] ^ Y[i + 2] ^ X[i + 5] ^ Y[i + 12] ^ X[i + 40] ^ Y[i + 55] ^ X[i + 72] ^ L[i];
|
||||
h ^= Y[i + 24] ^ X[i + 48] ^ Y[i + 61];
|
||||
|
||||
/* feedback of h into the registers */
|
||||
X[N_LEN_D + i] ^= h;
|
||||
Y[N_LEN_D + i] ^= h;
|
||||
}
|
||||
|
||||
/* copy final state into hashState */
|
||||
for (i = 0; i < N_LEN_D; ++i) {
|
||||
x[i] = X[ROUNDS_D + i];
|
||||
x[i + N_LEN_D] = Y[ROUNDS_D + i];
|
||||
}
|
||||
|
||||
free(X);
|
||||
free(Y);
|
||||
free(L);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int permute_s(u32 *x) {
|
||||
/* state of 256=2x128 bits */
|
||||
#define ROUNDS_S 4 * 256
|
||||
#define N_LEN_S 128
|
||||
#define L_LEN_S 10
|
||||
|
||||
u32 *X, *Y, *L;
|
||||
u32 h;
|
||||
int i;
|
||||
|
||||
X = (u32 *)malloc((N_LEN_S + ROUNDS_S) * sizeof(u32));
|
||||
Y = (u32 *)malloc((N_LEN_S + ROUNDS_S) * sizeof(u32));
|
||||
L = (u32 *)malloc((L_LEN_S + ROUNDS_S) * sizeof(u32));
|
||||
|
||||
/* local copy of the state in the registers*/
|
||||
for (i = 0; i < N_LEN_S; ++i) {
|
||||
X[i] = x[i];
|
||||
Y[i] = x[i + N_LEN_S];
|
||||
}
|
||||
|
||||
/* initialize the LFSR to 11..11 */
|
||||
for (i = 0; i < L_LEN_S; ++i)
|
||||
L[i] = 0xFFFFFFFF;
|
||||
|
||||
/* iterate rounds */
|
||||
for (i = 0; i < ROUNDS_S; ++i) {
|
||||
|
||||
/* need X[i] as linear term only, for invertibility */
|
||||
X[N_LEN_S + i] = X[i] ^ Y[i];
|
||||
X[N_LEN_S + i] ^= X[i + 16] ^ X[i + 26] ^ X[i + 39] ^ X[i + 52] ^ X[i + 61] ^ X[i + 69] ^ X[i + 84] ^ X[i + 97] ^ X[i + 103] ^ X[i + 94] ^ (X[i + 111] & X[i + 103]) ^ (X[i + 69] & X[i + 61]) ^ (X[i + 28] & X[i + 16]) ^ (X[i + 103] & X[i + 97] & X[i + 84]) ^ (X[i + 61] & X[i + 52] & X[i + 39]) ^ (X[i + 111] & X[i + 84] & X[i + 52] & X[i + 16]) ^ (X[i + 103] & X[i + 97] & X[i + 69] & X[i + 61]) ^ (X[i + 111] & X[i + 103] & X[i + 39] & X[i + 28]) ^ (X[i + 111] & X[i + 103] & X[i + 97] & X[i + 84] & X[i + 69]) ^ (X[i + 61] & X[i + 52] & X[i + 39] & X[i + 28] & X[i + 16]) ^ (X[i + 97] & X[i + 84] & X[i + 69] & X[i + 61] & X[i + 52] & X[i + 39]);
|
||||
|
||||
/* need Y[i] as linear term only, for invertibility */
|
||||
Y[N_LEN_S + i] = Y[i];
|
||||
Y[N_LEN_S + i] ^= Y[i + 13] ^ Y[i + 30] ^ Y[i + 37] ^ Y[i + 56] ^ Y[i + 65] ^ Y[i + 69] ^ Y[i + 79] ^ Y[i + 96] ^ Y[i + 101] ^ Y[i + 92] ^ (Y[i + 109] & Y[i + 101]) ^ (Y[i + 69] & Y[i + 65]) ^ (Y[i + 28] & Y[i + 13]) ^ (Y[i + 101] & Y[i + 96] & Y[i + 79]) ^ (Y[i + 65] & Y[i + 56] & Y[i + 37]) ^ (Y[i + 109] & Y[i + 79] & Y[i + 56] & Y[i + 13]) ^ (Y[i + 101] & Y[i + 96] & Y[i + 69] & Y[i + 65]) ^ (Y[i + 109] & Y[i + 101] & Y[i + 37] & Y[i + 28]) ^ (Y[i + 109] & Y[i + 101] & Y[i + 96] & Y[i + 79] & Y[i + 69]) ^ (Y[i + 65] & Y[i + 56] & Y[i + 37] & Y[i + 28] & Y[i + 13]) ^ (Y[i + 96] & Y[i + 79] & Y[i + 69] & Y[i + 65] & Y[i + 56] & Y[i + 37]);
|
||||
|
||||
/* need L[i] as linear term only, for invertibility */
|
||||
L[L_LEN_S + i] = L[i];
|
||||
L[L_LEN_S + i] ^= L[i + 3]; // linear feedback here
|
||||
|
||||
/* compute output of the h function */
|
||||
h = X[i + 47] ^ Y[i + 111] ^ (Y[i + 8] & X[i + 100]) ^ (X[i + 72] & X[i + 100]) ^ (X[i + 100] & Y[i + 111]) ^ (Y[i + 8] & X[i + 47] & X[i + 72]) ^ (Y[i + 8] & X[i + 72] & X[i + 100]) ^ (Y[i + 8] & X[i + 72] & Y[i + 111]) ^ (X[i + 47] & X[i + 72] & Y[i + 111] & L[i]) ^ (X[i + 47] & L[i]);
|
||||
h ^= X[i + 1] ^ Y[i + 3] ^ X[i + 7] ^ Y[i + 18] ^ X[i + 58] ^ Y[i + 80] ^ X[i + 105] ^ L[i];
|
||||
h ^= Y[i + 34] ^ Y[i + 71] ^ X[i + 90] ^ Y[i + 91];
|
||||
|
||||
/* feedback of h into the registers */
|
||||
X[N_LEN_S + i] ^= h;
|
||||
Y[N_LEN_S + i] ^= h;
|
||||
}
|
||||
|
||||
/* copy final state into hashState */
|
||||
for (i = 0; i < N_LEN_S; ++i) {
|
||||
x[i] = X[ROUNDS_S + i];
|
||||
x[i + N_LEN_S] = Y[ROUNDS_S + i];
|
||||
}
|
||||
|
||||
free(X);
|
||||
free(Y);
|
||||
free(L);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int permute_c(u32 *x) {
|
||||
/* state of 384=2x192 bits */
|
||||
#define ROUNDS_C 2 * 384
|
||||
#define N_LEN_C 192
|
||||
#define L_LEN_C 16
|
||||
|
||||
u32 *X, *Y, *L;
|
||||
u32 h;
|
||||
int i;
|
||||
|
||||
X = (u32 *)malloc((N_LEN_C + ROUNDS_C) * sizeof(u32));
|
||||
Y = (u32 *)malloc((N_LEN_C + ROUNDS_C) * sizeof(u32));
|
||||
L = (u32 *)malloc((L_LEN_C + ROUNDS_C) * sizeof(u32));
|
||||
|
||||
/* local copy of the state in the registers*/
|
||||
for (i = 0; i < N_LEN_C; ++i) {
|
||||
X[i] = x[i];
|
||||
Y[i] = x[i + N_LEN_C];
|
||||
}
|
||||
|
||||
/* initialize the LFSR to 11..11 */
|
||||
for (i = 0; i < L_LEN_C; ++i)
|
||||
L[i] = 0xFFFFFFFF;
|
||||
|
||||
/* iterate rounds */
|
||||
for (i = 0; i < ROUNDS_C; ++i) {
|
||||
|
||||
X[N_LEN_C + i] = X[i] ^ Y[i];
|
||||
X[N_LEN_C + i] ^= X[i + 13] ^ X[i + 34] ^ X[i + 65] ^ X[i + 77] ^ X[i + 94] ^ X[i + 109] ^ X[i + 127] ^ X[i + 145] ^ X[i + 157] ^ X[i + 140] ^ (X[i + 159] & X[i + 157]) ^ (X[i + 109] & X[i + 94]) ^ (X[i + 47] & X[i + 13]) ^ (X[i + 157] & X[i + 145] & X[i + 127]) ^ (X[i + 94] & X[i + 77] & X[i + 65]) ^ (X[i + 159] & X[i + 127] & X[i + 77] & X[i + 13]) ^ (X[i + 157] & X[i + 145] & X[i + 109] & X[i + 94]) ^ (X[i + 159] & X[i + 157] & X[i + 65] & X[i + 47]) ^ (X[i + 159] & X[i + 157] & X[i + 145] & X[i + 127] & X[i + 109]) ^ (X[i + 94] & X[i + 77] & X[i + 65] & X[i + 47] & X[i + 13]) ^ (X[i + 145] & X[i + 127] & X[i + 109] & X[i + 94] & X[i + 77] & X[i + 65]);
|
||||
|
||||
Y[N_LEN_C + i] = Y[i];
|
||||
Y[N_LEN_C + i] ^= Y[i + 21] ^ Y[i + 57] ^ Y[i + 60] ^ Y[i + 94] ^ Y[i + 112] ^ Y[i + 125] ^ Y[i + 133] ^ Y[i + 152] ^ Y[i + 157] ^ Y[i + 146] ^ (Y[i + 159] & Y[i + 157]) ^ (Y[i + 125] & Y[i + 112]) ^ (Y[i + 36] & Y[i + 21]) ^ (Y[i + 157] & Y[i + 152] & Y[i + 133]) ^ (Y[i + 112] & Y[i + 94] & Y[i + 60]) ^ (Y[i + 159] & Y[i + 133] & Y[i + 94] & Y[i + 21]) ^ (Y[i + 157] & Y[i + 152] & Y[i + 125] & Y[i + 112]) ^ (Y[i + 159] & Y[i + 157] & Y[i + 60] & Y[i + 36]) ^ (Y[i + 159] & Y[i + 157] & Y[i + 152] & Y[i + 133] & Y[i + 125]) ^ (Y[i + 112] & Y[i + 94] & Y[i + 60] & Y[i + 36] & Y[i + 21]) ^ (Y[i + 152] & Y[i + 133] & Y[i + 125] & Y[i + 112] & Y[i + 94] & Y[i + 60]);
|
||||
|
||||
L[L_LEN_C + i] = L[i] ^ L[i + 2] ^ L[i + 3] ^ L[i + 5];
|
||||
|
||||
|
||||
h = X[i + 25] ^ Y[i + 59] ^ (Y[i + 3] & X[i + 55]) ^ (X[i + 46] & X[i + 55]) ^ (X[i + 55] & Y[i + 59]) ^ (Y[i + 3] & X[i + 25] & X[i + 46]) ^ (Y[i + 3] & X[i + 46] & X[i + 55]) ^ (Y[i + 3] & X[i + 46] & Y[i + 59]) ^ (X[i + 25] & X[i + 46] & Y[i + 59] & L[i]) ^ (X[i + 25] & L[i]);
|
||||
h ^= L[i];
|
||||
h ^= X[i + 4] ^ X[i + 28] ^ X[i + 40] ^ X[i + 85] ^ X[i + 112] ^ X[i + 141] ^ X[i + 146] ^ X[i + 152];
|
||||
h ^= Y[i + 2] ^ Y[i + 33] ^ Y[i + 60] ^ Y[i + 62] ^ Y[i + 87] ^ Y[i + 99] ^ Y[i + 138] ^ Y[i + 148];
|
||||
|
||||
X[N_LEN_C + i] ^= h;
|
||||
Y[N_LEN_C + i] ^= h;
|
||||
}
|
||||
|
||||
/* copy final state into hashState */
|
||||
for (i = 0; i < N_LEN_C; ++i) {
|
||||
x[i] = X[ROUNDS_C + i];
|
||||
x[i + N_LEN_C] = Y[ROUNDS_C + i];
|
||||
}
|
||||
|
||||
free(X);
|
||||
free(Y);
|
||||
free(L);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* permutation of the state */
|
||||
static void permute(u32 *x) {
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("enter permute\n");
|
||||
showstate(x);
|
||||
#endif
|
||||
|
||||
#if defined(UQUARK)
|
||||
permute_u(x);
|
||||
#elif defined(DQUARK)
|
||||
permute_d(x);
|
||||
#elif defined(SQUARK)
|
||||
permute_s(x);
|
||||
#elif defined(CQUARK)
|
||||
permute_c(x);
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("permute done\n");
|
||||
showstate(x);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* initialization of the IV */
|
||||
int init_iv(hashState *state) {
|
||||
int i;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("enter init\n");
|
||||
#endif
|
||||
|
||||
/* initialize state */
|
||||
for (i = 0; i < 8 * WIDTH; ++i)
|
||||
state->x[i] = (iv[i / 8] >> (7 - (i % 8))) & 1;
|
||||
|
||||
state->pos = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("init done\n");
|
||||
showstate(state->x);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int update(hashState *state, const u8 *data, int databytelen) {
|
||||
/* caller promises us that previous data had integral number of bytes */
|
||||
/* so state->pos is a multiple of 8 */
|
||||
|
||||
int i;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("enter update\n");
|
||||
#endif
|
||||
|
||||
while (databytelen > 0) {
|
||||
|
||||
/* get next byte */
|
||||
u8 u = *data;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("get byte %02x at pos %d\n", u, state->pos);
|
||||
#endif
|
||||
|
||||
/* xor state with each bit */
|
||||
for (i = 8 * state->pos; i < 8 * state->pos + 8; ++i) {
|
||||
state->x[(8 * (WIDTH - RATE)) + i] ^= (u >> (i % 8)) & 1;
|
||||
}
|
||||
|
||||
|
||||
data += 1;
|
||||
databytelen -= 1;
|
||||
state->pos += 1;
|
||||
|
||||
if (state->pos == RATE) {
|
||||
permute(state->x);
|
||||
state->pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("update done\n");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* finalize (padding) and return digest */
|
||||
int final(hashState *state, u8 *out) {
|
||||
int i;
|
||||
int outbytes = 0;
|
||||
u8 u;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("enter final\n");
|
||||
#endif
|
||||
|
||||
/* append '1' bit */
|
||||
state->x[8 * (WIDTH - RATE) + state->pos * 8] ^= 1;
|
||||
|
||||
/* permute to obtain first final state*/
|
||||
permute(state->x);
|
||||
|
||||
/* zeroize output buffer */
|
||||
for (i = 0; i < DIGEST; ++i)
|
||||
out[i] = 0;
|
||||
|
||||
/* while output requested, extract RATE bytes and permute */
|
||||
while (outbytes < DIGEST) {
|
||||
|
||||
/* extract one byte */
|
||||
for (i = 0; i < 8; ++i) {
|
||||
u = state->x[8 * (WIDTH - RATE) + i + 8 * (outbytes % RATE)] & 1;
|
||||
out[outbytes] ^= (u << (7 - i));
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("extracted byte %02x (%d)\n", out[outbytes], outbytes);
|
||||
#endif
|
||||
|
||||
outbytes += 1;
|
||||
|
||||
if (outbytes == DIGEST)
|
||||
break;
|
||||
|
||||
/* if RATE bytes extracted, permute again */
|
||||
if (!(outbytes % RATE)) {
|
||||
permute(state->x);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("final done\n");
|
||||
#endif
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int quark(u8 *out, u8 *in, u64 inlen) {
|
||||
/* inlen in bytes */
|
||||
|
||||
hashState state;
|
||||
|
||||
init_iv(&state);
|
||||
update(&state, in, inlen);
|
||||
final(&state, out);
|
||||
|
||||
return 0;
|
||||
}
|
||||
37
src/quark.h
Normal file
37
src/quark.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
USBvalve
|
||||
*/
|
||||
|
||||
typedef uint64_t u64;
|
||||
typedef uint32_t u32;
|
||||
typedef uint8_t u8;
|
||||
|
||||
#define CQUARK
|
||||
|
||||
#if defined(UQUARK)
|
||||
#define CAPACITY 16
|
||||
#define RATE 1
|
||||
#define WIDTH 17
|
||||
#elif defined(DQUARK)
|
||||
#define CAPACITY 20
|
||||
#define RATE 2
|
||||
#define WIDTH 22
|
||||
#elif defined(SQUARK)
|
||||
#define CAPACITY 28
|
||||
#define RATE 4
|
||||
#define WIDTH 32
|
||||
#elif defined(CQUARK)
|
||||
#define CAPACITY 40
|
||||
#define RATE 8
|
||||
#define WIDTH 48
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int quark(u8 *out, u8 *in, u64 inlen);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
739
src/ramdisk.h
Normal file
739
src/ramdisk.h
Normal file
@@ -0,0 +1,739 @@
|
||||
/*
|
||||
USBvalve
|
||||
*/
|
||||
|
||||
/*
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2019 Ha Thach for Adafruit Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef RAMDISK_H_
|
||||
#define RAMDISK_H_
|
||||
|
||||
//
|
||||
// The filesystem contains 3 files at specific blocks (see also USBvalve.ino)
|
||||
// AUTORUN.INF
|
||||
// README.TXT
|
||||
// System Volume Information
|
||||
//
|
||||
#define README_CONTENTS \
|
||||
"...nuke the entire site from orbit. It's the only way to be sure."
|
||||
|
||||
#define AUTORUN_CONTENTS \
|
||||
"[autorun]\r\nopen=calc.exe\r\nicon=icon.ico\r\n"
|
||||
|
||||
uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = {
|
||||
{
|
||||
//------------- Block 0: -------------//
|
||||
0xeb, 0x3c, 0x90, 0x6d, 0x6b, 0x66, 0x73, 0x2e, 0x66, 0x61, 0x74, 0x00, 0x02, 0x01, 0x01, 0x00,
|
||||
0x01, 0x10, 0x00, 0x00, 0x08, 0xf8, 0x06, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x66, 0x36, 0xba, 0xf7, 0x55, 0x53, 0x42, 0x56, 0x41,
|
||||
0x4c, 0x56, 0x45, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x0e, 0x1f,
|
||||
0xbe, 0x5b, 0x7c, 0xac, 0x22, 0xc0, 0x74, 0x0b, 0x56, 0xb4, 0x0e, 0xbb, 0x07, 0x00, 0xcd, 0x10,
|
||||
0x5e, 0xeb, 0xf0, 0x32, 0xe4, 0xcd, 0x16, 0xcd, 0x19, 0xeb, 0xfe, 0x54, 0x68, 0x69, 0x73, 0x20,
|
||||
0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c,
|
||||
0x65, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x2e, 0x20, 0x20, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20,
|
||||
0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c,
|
||||
0x65, 0x20, 0x66, 0x6c, 0x6f, 0x70, 0x70, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x70, 0x72,
|
||||
0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74,
|
||||
0x72, 0x79, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x0d, 0x0a, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
|
||||
},
|
||||
{
|
||||
//------------- Block 1: -------------//
|
||||
0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00,
|
||||
0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 2: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 3: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 4: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 5: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 6: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 7: -------------//
|
||||
0x55, 0x53, 0x42, 0x56, 0x41, 0x4c, 0x56, 0x45, 0x20, 0x20, 0x20, 0x08, 0x00, 0x00, 0xaf, 0x60,
|
||||
0x6d, 0x55, 0x6d, 0x55, 0x00, 0x00, 0xaf, 0x60, 0x6d, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x41, 0x55, 0x54, 0x4f, 0x52, 0x55, 0x4e, 0x20, 0x49, 0x4e, 0x46, 0x20, 0x00, 0x9d, 0xef, 0x58,
|
||||
0x6d, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xef, 0x58, 0x6d, 0x55, 0x60, 0x00, 0x2a, 0x00, 0x00, 0x00,
|
||||
0x52, 0x45, 0x41, 0x44, 0x4d, 0x45, 0x20, 0x20, 0x54, 0x58, 0x54, 0x20, 0x00, 0x33, 0xf3, 0x58,
|
||||
0x6d, 0x55, 0x6d, 0x55, 0x00, 0x00, 0xf3, 0x58, 0x6d, 0x55, 0x5e, 0x00, 0x42, 0x00, 0x00, 0x00,
|
||||
0x42, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x0f, 0x00, 0x72, 0x72, 0x00,
|
||||
0x6d, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
|
||||
0x01, 0x53, 0x00, 0x79, 0x00, 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x0f, 0x00, 0x72, 0x6d, 0x00,
|
||||
0x20, 0x00, 0x56, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x65, 0x00,
|
||||
0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x7e, 0x31, 0x20, 0x20, 0x20, 0x16, 0x00, 0xc0, 0xb9, 0xbe,
|
||||
0x6b, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xba, 0xbe, 0x6b, 0x55, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 8: -------------//
|
||||
0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x00, 0xc0, 0xb9, 0xbe,
|
||||
0x6b, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xba, 0xbe, 0x6b, 0x55, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x00, 0xc0, 0xb9, 0xbe,
|
||||
0x6b, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xba, 0xbe, 0x6b, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x42, 0x74, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xce, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0x01, 0x57, 0x00, 0x50, 0x00, 0x53, 0x00, 0x65, 0x00, 0x74, 0x00, 0x0f, 0x00, 0xce, 0x74, 0x00,
|
||||
0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x73, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x64, 0x00, 0x61, 0x00,
|
||||
0x57, 0x50, 0x53, 0x45, 0x54, 0x54, 0x7e, 0x31, 0x44, 0x41, 0x54, 0x20, 0x00, 0x3d, 0xba, 0xbe,
|
||||
0x6b, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xbb, 0xbe, 0x6b, 0x55, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
||||
0x42, 0x47, 0x00, 0x75, 0x00, 0x69, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0x01, 0x49, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, 0x78, 0x00, 0x0f, 0x00, 0xff, 0x65, 0x00,
|
||||
0x72, 0x00, 0x56, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x65, 0x00,
|
||||
0x49, 0x4e, 0x44, 0x45, 0x58, 0x45, 0x7e, 0x31, 0x20, 0x20, 0x20, 0x20, 0x00, 0x48, 0xba, 0xbe,
|
||||
0x6b, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xbb, 0xbe, 0x6b, 0x55, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 9: -------------//
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 10: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 11: -------------//
|
||||
0x7b, 0x00, 0x38, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x37, 0x00, 0x36, 0x00, 0x36, 0x00,
|
||||
0x41, 0x00, 0x2d, 0x00, 0x34, 0x00, 0x32, 0x00, 0x41, 0x00, 0x30, 0x00, 0x2d, 0x00, 0x34, 0x00,
|
||||
0x34, 0x00, 0x44, 0x00, 0x45, 0x00, 0x2d, 0x00, 0x41, 0x00, 0x35, 0x00, 0x43, 0x00, 0x39, 0x00,
|
||||
0x2d, 0x00, 0x43, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x35, 0x00, 0x42, 0x00, 0x36, 0x00,
|
||||
0x42, 0x00, 0x32, 0x00, 0x44, 0x00, 0x39, 0x00, 0x35, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 12: -------------//
|
||||
0x0c, 0x00, 0x00, 0x00, 0xd8, 0xad, 0x48, 0x08, 0xdb, 0x13, 0xcd, 0xad, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 13: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 14: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 15: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 16: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 17: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 18: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 19: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 20: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 21: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 22: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 23: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 24: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 25: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 26: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 27: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 28: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 29: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 30: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 31: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 32: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 33: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 34: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 35: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 36: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 37: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 38: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 39: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 40: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 41: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 42: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 43: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 44: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 45: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 46: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 47: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 48: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 49: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 50: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 51: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 52: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 53: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 54: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 55: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 56: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 57: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 58: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 59: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 60: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 61: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 62: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 63: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 64: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 65: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 66: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 67: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 68: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 69: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 70: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 71: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 72: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 73: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 74: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 75: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 76: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 77: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 78: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 79: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 80: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 81: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 82: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 83: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 84: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 85: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 86: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 87: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 88: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 89: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 90: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 91: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 92: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 93: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 94: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 95: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 96: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 97: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 98: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 99: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 100: -------------//
|
||||
0x2e, 0x2e, 0x2e, 0x6e, 0x75, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x72, 0x65, 0x20, 0x73, 0x69, 0x74, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x72, 0x62,
|
||||
0x69, 0x74, 0x2e, 0x20, 0x49, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c,
|
||||
0x79, 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x75, 0x72, 0x65,
|
||||
0x2e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 101: -------------//
|
||||
0x00
|
||||
},
|
||||
{
|
||||
//------------- Block 102: -------------//
|
||||
0x5b, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x75, 0x6e, 0x5d, 0x0d, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x3d,
|
||||
0x63, 0x61, 0x6c, 0x63, 0x2e, 0x65, 0x78, 0x65, 0x0d, 0x0a, 0x69, 0x63, 0x6f, 0x6e, 0x3d, 0x69,
|
||||
0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x0d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
},
|
||||
};
|
||||
|
||||
#endif /* RAMDISK_H_ */
|
||||
|
||||
55
utils/create_ramdisk.py
Normal file
55
utils/create_ramdisk.py
Normal file
@@ -0,0 +1,55 @@
|
||||
#
|
||||
# Create an empty file
|
||||
# dd if=/dev/zero of=fat.fs bs=1024 count=1024
|
||||
# Format fs file
|
||||
# sudo mkfs.fat fat.fs -g 1/1 -f 1 -s 1 -r 16 -n "USBVALVE"
|
||||
#
|
||||
# Mount the fs
|
||||
# sudo mount fat.fs /mnt
|
||||
#
|
||||
# Now you can create a minimal set of files (AUTORUN.INF and README.TXT).
|
||||
# Place them (by manually fixing the ROOT_DIR and FATTABLE) out of the caching
|
||||
# sectors (> 100 ?)
|
||||
#
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
def all_zero(buff):
|
||||
ret = True
|
||||
for x in buff:
|
||||
if x != 0:
|
||||
ret = False
|
||||
break
|
||||
return ret
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print('Please specify input file')
|
||||
sys.exit(1)
|
||||
|
||||
f = open(sys.argv[1], "rb")
|
||||
|
||||
print('uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = {')
|
||||
|
||||
block = 0
|
||||
|
||||
while True:
|
||||
data = f.read(512)
|
||||
if not data:
|
||||
break
|
||||
print('{ ')
|
||||
print('//------------- Block %d: -------------//' % (block))
|
||||
block += 1
|
||||
if all_zero(data):
|
||||
print('0x00')
|
||||
else:
|
||||
dump = ' '.join("0x{:02x},".format(c) for c in data)
|
||||
dump = re.sub("(.{96})", "\\1\n", dump, 0, re.DOTALL)
|
||||
dump = dump[:-1] # Remove last comma
|
||||
print(dump)
|
||||
print('},')
|
||||
|
||||
print('};')
|
||||
|
||||
f.close()
|
||||
sys.exit(0)
|
||||
BIN
utils/fat.fs
Normal file
BIN
utils/fat.fs
Normal file
Binary file not shown.
Reference in New Issue
Block a user