epd-spectra 0.4.0

Driver for Spectra EPDs from Pervasive Displays Inc
Documentation
//! Simple "Hello World" example for a raspberry with a 2.66 inch e-paper display.
//!
//! Connections:
//!
//! | Raspberry      | EPD   |
//! |----------------|-------|
//! | GPIO 11 (SCLK) | SCK   |
//! | GPIO 10 (MOSI) | MOSI  |
//! | GPIO 8  (CE0)  | CS    |
//! | GPIO 24        | BUSY  |
//! | GPIO 25        | DC    |
//! | GPIO 17        | RESET |
//!
//! If you have another display size, simply replace `Display2in66` with your display.
//! You have to enable SPI (e.g. with raspi-config) and you have to execute the binary with sudo:
//! `cargo build --example raspberry --features="std" && sudo ./target/debug/examples/raspberry`

use embedded_graphics::{
    image::{Image, ImageRaw},
    mono_font::{iso_8859_1::FONT_10X20, MonoTextStyle},
    prelude::*,
    text::Text,
};
use epd_spectra::{Display2in66, Epd, TriColor};
use rppal::{
    gpio::Gpio,
    hal::Delay,
    spi::{Bus, Mode, SimpleHalSpiDevice, SlaveSelect, Spi},
};
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // setup a display buffer
    let mut display = Display2in66::default();

    Text::new(
        "Hello",
        Point::new(10, 20),
        MonoTextStyle::new(&FONT_10X20, TriColor::Black),
    )
    .draw(&mut display)?;

    Text::new(
        "World",
        Point::new(30, 60),
        MonoTextStyle::new(&FONT_10X20, TriColor::Red),
    )
    .draw(&mut display)?;

    let ferris: ImageRaw<TriColor> = ImageRaw::new(FERRIS_IMG, FERRIS_WIDTH);
    let ferris: Image<_> = Image::new(&ferris, Point::new(0, 100));
    ferris.draw(&mut display).unwrap();

    // setup all peripherals needed for EPD driver
    let spi = Spi::new(Bus::Spi0, SlaveSelect::Ss0, 4_000_000, Mode::Mode0)?;

    let mut spi_device = SimpleHalSpiDevice::new(spi);
    let gpio = Gpio::new()?;

    let busy = gpio.get(24)?.into_input();
    let dc = gpio.get(25)?.into_output();
    let rst = gpio.get(17)?.into_output();
    let mut delay = Delay {};

    let epd = Epd::new(&mut spi_device, busy, dc, rst, &mut delay, 4096);
    let mut epd = epd.init(&mut spi_device, &mut delay)?;

    // show the display
    epd.update(&display, &mut spi_device, &mut delay)?;
    let _inactive_epd = epd.power_off(&mut spi_device, &mut delay)?;

    Ok(())
}

// This code is generated with convert_bmp.py
const FERRIS_WIDTH: u32 = 150;
const FERRIS_IMG: &[u8] = &[
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 10, 160, 0, 42, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 168, 0, 42, 160, 0,
    170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 2, 170, 0, 42, 168, 2, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 2, 170, 128, 170, 168, 10, 170, 128, 0, 160, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 128, 10, 170, 162, 170, 170,
    42, 170, 128, 10, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 42, 160, 10, 170, 170, 170, 170, 170, 170, 160, 42, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 42, 170, 170, 170, 170, 170, 170, 160,
    170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    168, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 160, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 42, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 160,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 2, 160, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
    0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0,
    0, 0, 0, 42, 160, 0, 32, 0, 0, 0, 0, 160, 0, 0, 0, 0, 2, 170, 130, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 10, 170, 0, 0, 0, 0, 170, 160, 0, 40, 0,
    0, 0, 0, 170, 0, 0, 0, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 2, 170, 128, 0, 40, 0, 0, 0, 0, 170, 128, 0, 0, 0,
    0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 0, 0, 0, 10, 170, 128, 0, 40, 0, 0, 40, 0, 170, 160, 0, 0, 0, 0, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 42,
    170, 128, 0, 168, 0, 0, 168, 0, 170, 168, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 170, 170, 128, 0, 170, 0,
    2, 168, 0, 42, 170, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 170, 170, 128, 2, 170, 0, 2, 170, 0, 42, 170,
    128, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 168, 0, 0, 2, 170, 170, 128, 2, 170, 0, 10, 170, 0, 42, 170, 128, 0, 0, 0, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168,
    0, 0, 2, 170, 170, 128, 10, 170, 0, 10, 170, 128, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 2,
    170, 170, 128, 42, 168, 0, 10, 170, 128, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 2, 170,
    170, 128, 170, 168, 0, 10, 170, 160, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 2, 170, 170,
    138, 170, 168, 0, 10, 170, 168, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 2, 170, 170, 170,
    170, 160, 0, 10, 170, 168, 10, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 2, 170, 170, 170, 170,
    160, 0, 10, 170, 170, 10, 170, 160, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 170, 170, 170, 170, 128, 0,
    2, 170, 170, 170, 170, 160, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 170, 170, 170, 170, 0, 0, 2, 170,
    170, 170, 170, 160, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 42, 170, 170, 170, 0, 0, 0, 170, 170, 170, 170,
    128, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 128, 0, 42, 170, 170, 168, 0, 0, 0, 42, 170, 170, 170, 128, 0, 42,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 168, 0, 10, 170, 170, 160, 0, 0, 0, 10, 170, 170, 170, 128, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 168, 2, 170, 170, 128, 0, 0, 0, 0, 170, 170, 170, 2, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 2, 170, 168, 0, 0, 0, 0, 0, 42, 170, 168, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 2, 170,
    160, 0, 0, 0, 0, 0, 2, 170, 168, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 1, 86,
    170, 170, 170, 160, 21, 170, 170, 170, 170, 170, 170, 170, 170, 168, 10, 170, 0, 0, 0, 0, 0, 0,
    0, 42, 168, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 85, 170, 170, 170, 128, 5,
    106, 170, 170, 170, 170, 170, 170, 170, 160, 42, 168, 0, 0, 0, 0, 0, 0, 0, 42, 170, 0, 10, 170,
    170, 170, 170, 170, 170, 170, 170, 160, 0, 85, 106, 170, 170, 0, 5, 90, 170, 170, 170, 170,
    170, 170, 170, 160, 170, 160, 0, 0, 0, 0, 0, 0, 0, 10, 170, 128, 10, 170, 170, 170, 170, 170,
    170, 170, 170, 160, 0, 85, 106, 170, 170, 0, 5, 90, 170, 170, 170, 170, 170, 170, 170, 130,
    170, 160, 0, 0, 0, 0, 0, 0, 0, 2, 170, 168, 2, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0,
    85, 90, 170, 169, 0, 5, 90, 170, 170, 170, 170, 170, 170, 170, 138, 170, 128, 0, 0, 0, 0, 0, 0,
    0, 0, 170, 170, 138, 170, 170, 170, 170, 170, 170, 170, 170, 164, 0, 85, 90, 170, 169, 64, 5,
    86, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 164, 1, 85, 90, 170, 169, 80, 21, 86, 170, 170, 170, 170,
    170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 165, 69, 85, 90, 170, 169, 85, 85, 86, 170, 170, 170, 170, 170, 170, 170, 170, 160,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 85, 85,
    90, 170, 169, 85, 85, 86, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 85, 85, 90, 170, 169, 85, 85, 86,
    170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 165, 85, 85, 106, 170, 170, 85, 85, 90, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 169, 85, 85, 106, 170, 170, 149, 85, 106, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 85, 85,
    170, 170, 170, 165, 85, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 0, 0, 0, 0,
    0, 0, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 90, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 168, 42, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 10, 130, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 160, 42, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 42, 130,
    170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 168, 10, 160, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 149, 86, 170, 170, 170, 170, 170, 170, 170, 170, 0, 42, 2, 170, 160, 0, 0, 0, 0,
    0, 0, 0, 0, 2, 170, 168, 2, 160, 2, 170, 170, 170, 170, 170, 170, 170, 170, 169, 85, 86, 170,
    170, 170, 170, 170, 170, 170, 160, 0, 40, 2, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 168, 0,
    168, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 85, 90, 170, 170, 170, 170, 170, 170, 168,
    0, 0, 168, 10, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 0, 168, 0, 0, 42, 170, 170, 170,
    170, 170, 170, 170, 165, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 160, 10, 170, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 42, 170, 128, 42, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170,
    170, 170, 170, 170, 128, 0, 0, 2, 128, 10, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 128, 10,
    0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 2, 128, 42,
    168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 160, 2, 128, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170,
    170, 170, 170, 168, 0, 0, 0, 0, 0, 10, 0, 42, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 160,
    0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 42, 128, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 42, 168, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 32, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 168, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 0, 8, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 160, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 10, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 168, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 128, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];