//4x4x4 LED Cube Show 2
//By: Tyler Manders
//I wrote this one myself, enjoy!


#include <avr/pgmspace.h> // allows use of PROGMEM to store patterns in flash

#define CUBESIZE 4
#define PLANESIZE CUBESIZE*CUBESIZE
#define PLANETIME 100 // time each plane is displayed in us -> 100 Hz refresh
#define TIMECONST 10// multiplies DisplayTime to get ms - why not =100?

// LED Pattern Table in PROGMEM - last column is display time in 100ms units
// TODO this could be a lot more compact but not with binary pattern representation
prog_uchar PROGMEM PatternTable[] = {
// blink on and off

//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16

B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,5, //start stairs up down and around outside
B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,10,
B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,5,
B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,5, //second time
B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,10,
B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,5,
B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5,
B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16      //start 2x2 in and out
B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,20, //ends and gos into box 2X2
B0000,B0000,B0000,B0000,B0011,B0000,B0000,B0000,B0011,B0000,B0000,B0000,B0000,B0000,B0000,B0000,20,
B0000,B0000,B0000,B0000,B0011,B0010,B0000,B0000,B0011,B0010,B0000,B0000,B0000,B0000,B0000,B0000,20,
B0000,B0000,B0000,B0000,B0011,B0011,B0000,B0000,B0011,B0011,B0000,B0000,B0000,B0000,B0000,B0000,20,
B0011,B0011,B0000,B0000,B0011,B0011,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,20,
B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,20,
B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,20,
B0000,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, //to bigger box 3x3
B0000,B0000,B0011,B0011,B0000,B0000,B0011,B0011,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0001,B0011,B0111,B0000,B0001,B0011,B0111,B0000,B0000,B0001,B0011,B0000,B0000,B0000,B0000,10,
B0000,B0011,B0111,B0111,B0000,B0011,B0011,B0111,B0000,B0001,B0011,B0111,B0000,B0000,B0000,B0000,10,
B0000,B0111,B0111,B0111,B0000,B0111,B0111,B0111,B0000,B0011,B0111,B0111,B0000,B0000,B0000,B0000,10,
B0000,B0111,B0111,B0111,B0000,B0111,B0111,B0111,B0000,B0111,B0111,B0111,B0000,B0000,B0000,B0000,20, //cube done starts moving 
B0000,B0000,B0000,B0000,B0000,B0111,B0111,B0111,B0000,B0111,B0111,B0111,B0000,B0111,B0111,B0111,10,
B0000,B0000,B0000,B0000,B0000,B1110,B1110,B1110,B0000,B1110,B1110,B1110,B0000,B1110,B1110,B1110,10,
B0000,B0000,B0000,B0000,B0000,B1110,B1110,B1110,B0000,B1110,B1110,B1110,B0000,B1100,B1110,B1110,10,
B0000,B0000,B0000,B0000,B0000,B1100,B1110,B1110,B0000,B1100,B1100,B1110,B0000,B1000,B1100,B1110,10,
B0000,B0000,B0000,B0000,B0000,B1000,B1100,B1110,B0000,B1000,B1100,B1110,B0000,B0000,B1000,B1100,10,
B0000,B0000,B0000,B0000,B0000,B0000,B1100,B1100,B0000,B0000,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1100,B1100,B0000,B0000,B1100,B1100,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B1100,B0000,B0000,B1100,B1100,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B0000,B0000,B1000,B1100,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,10, //worm starts
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1100,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1110,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0111,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0011,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0011,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0001,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0010,B0011,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0010,B0010,B0011,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0110,B0010,B0010,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0110,B0100,B0100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0100,B0100,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B1000,B0000,B0000,B0100,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B1000,B1000,B0000,B0000,B0000,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B1000,B1000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, //filling of bottom layer begins
B1100,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1100,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1100,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1110,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, //filling ends fliping to left side begins
B0111,B0111,B0111,B0111,B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0011,B0011,B0011,B0011,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,10, //end flip
B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10, //flip to top begins
B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10,
B1000,B1000,B1000,B1000,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,10,
B0000,B0000,B0000,B0000,B1000,B1000,B1000,B1000,B0100,B0100,B0100,B0010,B0011,B0011,B0011,B0011,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B1000,B1000,B0100,B0111,B0111,B0111,B0111,10,//end flip
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B1111,B1111,10,//begin flip to back
B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B1111,10,
B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,10,
B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,10,
B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,10,//end flip
B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B1111,B0000,10,//start flip to bottom
B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B1111,B0000,B0000,B1111,B0000,B0000,10,
B0000,B0000,B0000,B1111,B0000,B0000,B1111,B0000,B0000,B1111,B0000,B0000,B1111,B0000,B0000,B0000,10,
B0000,B0000,B1111,B1111,B0000,B1111,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
                                                                                                    //repeat
B0111,B0111,B0111,B0111,B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0011,B0011,B0011,B0011,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,10, //end flip
B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10, //flip to top begins
B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10,
B1000,B1000,B1000,B1000,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,10,
B0000,B0000,B0000,B0000,B1000,B1000,B1000,B1000,B0100,B0100,B0100,B0010,B0011,B0011,B0011,B0011,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1000,B1000,B1000,B0100,B0111,B0111,B0111,B0111,10,//end flip
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B1111,B1111,10,//begin flip to back
B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B1111,10,
B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,10,
B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,10,
B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,B0000,B0000,B0000,B1111,10,//end flip on back
B0000,B0000,B0001,B1110,B0000,B0000,B0001,B1110,B0000,B0000,B0001,B1110,B0000,B0000,B0001,B1110,10,//begins to turn to diagnal
B0000,B0001,B0010,B1100,B0000,B0001,B0010,B1100,B0000,B0001,B0010,B1100,B0000,B0001,B0010,B1100,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//begin spinning              //1
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,10,//at other diagnal
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//begin spinning              //2
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,10,//at other diagnal
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//begin spinning              //3
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,10,//at other diagnal
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//begin spinning             //4
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,10,//at other diagnal
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//begin spinning             //5
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,10,//at other diagnal
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//begin spinning             //6
B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,10,
B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,10,
B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,10,//at other diagnal
B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,10,
B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,10,
B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,10,//end spiral seires
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0001,B0001,B0010,B0100,B0001,B0001,B0010,B0100,B0001,B0001,B0010,B0100,B0001,B0001,B0010,B0100,10,//start to end on left side
B0001,B0001,B0001,B0010,B0001,B0001,B0001,B0010,B0001,B0001,B0001,B0010,B0001,B0001,B0001,B0010,10,//end all on left side
B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10,//start to go diagnal sideways
B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10,
B1000,B1000,B1000,B1000,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0001,B0001,B0001,B0001,10,//end in diagnal 
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral            //1
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,//at other diagnal
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral            //2
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,//at other diagnal
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral           //3
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,//at other diagnal
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral           //4
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,//at other diagnal
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral           //5
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,//at other diagnal
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral           //5
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10,//at other diagnal
B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10,
B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0000,B0000,B0000,B0000,B1100,B1100,B1100,B1100,B0011,B0011,B0011,B0011,B0000,B0000,B0000,B0000,10,//begin side spiral           //5
B0000,B0000,B0000,B0000,B0011,B0011,B0011,B0011,B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,10,
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B1000,B1000,B1000,B1000,10, //end side spirals
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,10, //transition to left side
B0001,B0001,B0001,B0001,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,10,
B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,10,
B0010,B0001,B0001,B0001,B0010,B0010,B0001,B0001,B0001,B0001,B0010,B0010,B0001,B0001,B0001,B0010,10,
B0100,B0010,B0001,B0001,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0001,B0001,B0010,B0100,10,
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,5,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,5,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,5,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,5,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,5,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,5,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,5,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,5,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,5,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,5,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,5,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,5,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,5,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,5,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,5,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,5,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,5,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,5,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,5,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,5,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,5,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,5,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,5,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,5,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,5,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,5,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,5,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,5,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,5,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,5,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //start corkscrew spiral
B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,10,//2
B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,10,//3
B0001,B0010,B0100,B1000,B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,10,//4
B0000,B0011,B1100,B0000,B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,10,//5
B0000,B1100,B0011,B0000,B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,10,//6
B1000,B0100,B0010,B0001,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0001,B0010,B0100,B1000,10,//1 //move out of cork spiral to right wall
B1000,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B1000,10,
B1000,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B1000,10, 
B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,10,
B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,10,//left wall falls
B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B0000,B1000,B1000,B1000,10,
B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B0000,B1000,B1000,B1000,B0000,B0000,B1000,B1000,10,
B1000,B1000,B1000,B1000,B0000,B1000,B1000,B1000,B0000,B0000,B1000,B1000,B0000,B0000,B0000,B1000,10,
B0000,B1000,B1000,B1000,B0000,B0000,B1000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B1000,B1000,B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B0000,B0000,B0000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,//filling of entire cube
B0000,B0000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1000,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1100,B1000,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1000,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1100,B1000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1100,B1100,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1100,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1100,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1100,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1110,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1110,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1110,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B0000,B0000,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B0000,B0001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B0001,B0001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B0011,B0001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B0111,B0001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B0001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1001,B0001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B1111,B1111,B1111,B1111,B1111,B1001,B1001,B0001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1001,B1001,B1001,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1001,B1001,B1101,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1001,B1101,B1101,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1101,B1101,B1101,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1101,B1101,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1101,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0010,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B0010,B0010,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0010,B0010,B0010,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0010,B0010,B0010,B0010,B0000,B0000,B0000,B0000,10, 
//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0110,B0010,B0010,B0010,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0110,B0110,B0010,B0010,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0110,B0110,B0110,B0010,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0110,B0110,B0110,B0110,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0111,B0110,B0110,B1110,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0111,B0111,B1110,B1110,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0111,B1111,B1111,B1110,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B0000,B0000,10, 
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1000,B0000,B0000,B0001,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1100,B0000,B0000,B0011,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1110,B0000,B0000,B0111,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0000,B1111,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0001,B1000,B1111,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1001,B1001,B1111,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1101,B1011,B1111,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,1000,//fade out of outside
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0110,B0110,B0000,10,
B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,10,
B1111,B1111,B1111,B1111,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,10,
B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,10,
B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,10,//fade of inside
B0000,B0110,B0110,B0000,B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0110,B0110,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,4000,//end














// this is a dummy element for end of table (duration=0) aka !!!DO NOT TOUCH!!!
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 0
};

/*
** Defining pins in array makes it easier to rearrange how cube is wired
** Adjust numbers here until LEDs flash in order - L to R, T to B
** Note that analog inputs 0-5 are also digital outputs 14-19!
** Pin DigitalOut0 (serial RX) and AnalogIn5 are left open for future apps
*/

int LEDPin[] = {13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 14, 15};
int PlanePin[] = {16, 17, 18, 19};

// initialization
void setup()
{
int pin; // loop counter
// set up LED pins as output (active HIGH)
for (pin=0; pin<PLANESIZE; pin++) {
pinMode( LEDPin[pin], OUTPUT );
}
// set up plane pins as outputs (active LOW)
for (pin=0; pin<CUBESIZE; pin++) {
pinMode( PlanePin[pin], OUTPUT );
}
}

// display pattern in table until DisplayTime is zero (then repeat)
void loop()
{
// declare variables
byte PatternBuf[PLANESIZE]; // saves current pattern from PatternTable
int PatternIdx;
byte DisplayTime; // time*100ms to display pattern
unsigned long EndTime;
int plane; // loop counter for cube refresh
int patbufidx; // indexes which byte from pattern buffer
int ledrow; // counts LEDs in refresh loop
int ledcol; // counts LEDs in refresh loop
int ledpin; // counts LEDs in refresh loop

// Initialize PatternIdx to beginning of pattern table
PatternIdx = 0;
// loop over entries in pattern table - while DisplayTime>0
do {
// read pattern from PROGMEM and save in array
memcpy_P( PatternBuf, PatternTable+PatternIdx, PLANESIZE );
PatternIdx += PLANESIZE;
// read DisplayTime from PROGMEM and increment index
DisplayTime = pgm_read_byte_near( PatternTable + PatternIdx++ );
// compute EndTime from current time (ms) and DisplayTime
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;

// loop while DisplayTime>0 and current time < EndTime
while ( millis() < EndTime ) {
patbufidx = 0; // reset index counter to beginning of buffer
// loop over planes
for (plane=0; plane<CUBESIZE; plane++) {
// turn previous plane off
if (plane==0) {
digitalWrite( PlanePin[CUBESIZE-1], HIGH );
} else {
digitalWrite( PlanePin[plane-1], HIGH );
}

// load current plane pattern data into ports
ledpin = 0;
for (ledrow=0; ledrow<CUBESIZE; ledrow++) {
for (ledcol=0; ledcol<CUBESIZE; ledcol++) {
digitalWrite( LEDPin[ledpin++], PatternBuf[patbufidx] & (1 << ledcol) );
}
patbufidx++;
}

// turn current plane on
digitalWrite( PlanePin[plane], LOW );
// delay PLANETIME us
delayMicroseconds( PLANETIME );
} // for plane
} // while <EndTime
} while (DisplayTime > 0); // read patterns until time=0 which signals end
}

