summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorweidai <weidai11@users.noreply.github.com>2003-07-19 03:47:20 +0000
committerweidai <weidai11@users.noreply.github.com>2003-07-19 03:47:20 +0000
commit5307588c579cea190110da798d498f3ffc15079f (patch)
tree09d13a6fae123a46962ad82f4b88b7c91bd08335
parentdb4981d479d967dafa5ec2f55c6a0735f897b2cb (diff)
downloadcryptopp-git-5307588c579cea190110da798d498f3ffc15079f.tar.gz
remove Diamond2, code size reductions
-rw-r--r--bench.cpp3
-rw-r--r--config.h4
-rw-r--r--cryptest.cpp119
-rw-r--r--diamond.cpp572
-rw-r--r--diamond.h109
-rw-r--r--diamondt.cpp2270
-rw-r--r--elgamal.h4
-rw-r--r--factory.h7
-rw-r--r--misc.h28
-rw-r--r--nbtheory.cpp147
-rw-r--r--nbtheory.h10
-rw-r--r--pubkey.h2
-rw-r--r--test.cpp2
-rw-r--r--validat1.cpp51
-rw-r--r--validate.h1
15 files changed, 86 insertions, 3243 deletions
diff --git a/bench.cpp b/bench.cpp
index 82f84463..3e0fa92f 100644
--- a/bench.cpp
+++ b/bench.cpp
@@ -19,7 +19,6 @@
#include "arc4.h"
#include "rc5.h"
#include "blowfish.h"
-#include "diamond.h"
#include "wake.h"
#include "3way.h"
#include "safer.h"
@@ -466,8 +465,6 @@ void BenchMarkAll(double t)
BenchMarkKeyed<RC2::Encryption>("RC2", t);
BenchMarkKeyed<RC5::Encryption>("RC5 (r=16)", t);
BenchMarkKeyed<Blowfish::Encryption>("Blowfish", t);
- BenchMarkKeyed<Diamond2::Encryption>("Diamond2", t);
- BenchMarkKeyed<Diamond2Lite::Encryption>("Diamond2 Lite", t);
BenchMarkKeyed<ThreeWayDecryption>("3-WAY", t);
BenchMarkKeyed<TEA::Encryption>("TEA", t);
BenchMarkKeyedVariable<SAFER_SK::Encryption>("SAFER (r=8)", t, 8);
diff --git a/config.h b/config.h
index af4b08a5..d9b119a6 100644
--- a/config.h
+++ b/config.h
@@ -39,10 +39,6 @@
// and you want a (possibly) faster IDEA implementation using log tables
// #define IDEA_LARGECACHE
-// Try this if you have a large cache or your CPU is slow manipulating
-// individual bytes.
-// #define DIAMOND_USE_PERMTABLE
-
// Define this if, for the linear congruential RNG, you want to use
// the original constants as specified in S.K. Park and K.W. Miller's
// CACM paper.
diff --git a/cryptest.cpp b/cryptest.cpp
deleted file mode 100644
index 9aea0ba8..00000000
--- a/cryptest.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-#include "pch.h"
-
-#ifdef __BCPLUSPLUS__
-#include <condefs.h>
-
-
-//---------------------------------------------------------------------------
-USEUNIT("3way.cpp");
-USEUNIT("algebra.cpp");
-USEUNIT("asn.cpp");
-USEUNIT("base64.cpp");
-USEUNIT("bench.cpp");
-USEUNIT("bfinit.cpp");
-USEUNIT("blowfish.cpp");
-USEUNIT("blumgold.cpp");
-USEUNIT("blumshub.cpp");
-USEUNIT("camellia.cpp");
-USEUNIT("cast.cpp");
-USEUNIT("cast128s.cpp");
-USEUNIT("crc.cpp");
-USEUNIT("cryptlib.cpp");
-USEUNIT("default.cpp");
-USEUNIT("des.cpp");
-USEUNIT("dessp.cpp");
-USEUNIT("dh.cpp");
-USEUNIT("diamond.cpp");
-USEUNIT("diamondt.cpp");
-USEUNIT("dsa.cpp");
-USEUNIT("ec2n.cpp");
-USEUNIT("eccrypto.cpp");
-USEUNIT("ecp.cpp");
-USEUNIT("elgamal.cpp");
-USEUNIT("eprecomp.cpp");
-USEUNIT("files.cpp");
-USEUNIT("filters.cpp");
-USEUNIT("forkjoin.cpp");
-USEUNIT("gf2_32.cpp");
-USEUNIT("gf256.cpp");
-USEUNIT("gf2n.cpp");
-USEUNIT("gost.cpp");
-USEUNIT("gzip.cpp");
-USEUNIT("haval.cpp");
-USEUNIT("hex.cpp");
-USEUNIT("idea.cpp");
-USEUNIT("integer.cpp");
-USEUNIT("iterhash.cpp");
-USEUNIT("luc.cpp");
-USEUNIT("md5.cpp");
-USEUNIT("md5mac.cpp");
-USEUNIT("misc.cpp");
-USEUNIT("modes.cpp");
-USEUNIT("nbtheory.cpp");
-USEUNIT("oaep.cpp");
-USEUNIT("pch.cpp");
-USEUNIT("pkcspad.cpp");
-USEUNIT("polynomi.cpp");
-USEUNIT("pubkey.cpp");
-USEUNIT("queue.cpp");
-USEUNIT("rabin.cpp");
-USEUNIT("randpool.cpp");
-USEUNIT("rc5.cpp");
-USEUNIT("ripemd.cpp");
-USEUNIT("rng.cpp");
-USEUNIT("rsa.cpp");
-USEUNIT("safer.cpp");
-USEUNIT("seal.cpp");
-USEUNIT("secshare.cpp");
-USEUNIT("secsplit.cpp");
-USEUNIT("sha.cpp");
-USEUNIT("shacal2.cpp");
-USEUNIT("shark.cpp");
-USEUNIT("sharkbox.cpp");
-USEUNIT("square.cpp");
-USEUNIT("squaretb.cpp");
-USEUNIT("tea.cpp");
-USEUNIT("test.cpp");
-USEUNIT("tiger.cpp");
-USEUNIT("tigertab.cpp");
-USEUNIT("ttmac.cpp");
-USEUNIT("validat1.cpp");
-USEUNIT("validat2.cpp");
-USEUNIT("validat3.cpp");
-USEUNIT("wake.cpp");
-USEUNIT("whrlpool.cpp");
-USEUNIT("zbits.cpp");
-USEUNIT("zdeflate.cpp");
-USEUNIT("zinflate.cpp");
-USEUNIT("ztrees.cpp");
-USEUNIT("cbc.cpp");
-USEUNIT("arc4.cpp");
-USEUNIT("modexppc.cpp");
-USEUNIT("md2.cpp");
-USEUNIT("rc2.cpp");
-USEUNIT("rc6.cpp");
-USEUNIT("mars.cpp");
-USEUNIT("rw.cpp");
-USEUNIT("marss.cpp");
-USEUNIT("nr.cpp");
-USEUNIT("mqv.cpp");
-USEUNIT("rijndael.cpp");
-USEUNIT("twofish.cpp");
-USEUNIT("serpent.cpp");
-USEUNIT("rdtables.cpp");
-USEUNIT("tftables.cpp");
-USEUNIT("xtr.cpp");
-USEUNIT("skipjack.cpp");
-USEUNIT("mqueue.cpp");
-USEUNIT("xtrcrypt.cpp");
-USEUNIT("network.cpp");
-USEUNIT("osrng.cpp");
-USEUNIT("socketft.cpp");
-//---------------------------------------------------------------------------
-int cmain(int argc, char **argv);
-
-int main(int argc, char **argv)
-{
- return cmain(argc, argv);
-}
-#endif
diff --git a/diamond.cpp b/diamond.cpp
deleted file mode 100644
index 6e68cf4d..00000000
--- a/diamond.cpp
+++ /dev/null
@@ -1,572 +0,0 @@
-// diamond.cpp - modified by Wei Dai from:
-
-/* diamond2.c - Encryption designed to exceed DES in security.
- This file and the Diamond2 and Diamond2 Lite Block Ciphers
- described herein are hereby dedicated to the Public Domain by the
- author and inventor, Michael Paul Johnson. Feel free to use these
- for any purpose that is legally and morally right. The names
- "Diamond2 Block Cipher" and "Diamond2 Lite Block Cipher" should only
- be used to describe the algorithms described in this file, to avoid
- confusion.
-
- Disclaimers: the following comes with no warranty, expressed or
- implied. You, the user, must determine the suitability of this
- information to your own uses. You must also find out what legal
- requirements exist with respect to this data and programs using
- it, and comply with whatever valid requirements exist.
-*/
-
-#include "pch.h"
-#include "diamond.h"
-#include "crc.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-class Diamond2SboxMaker
-{
-public:
- Diamond2SboxMaker(const byte *external_key, unsigned int key_size,
- unsigned int rounds, bool lite);
-
- void MakeSbox(byte *sbox, CipherDir direction);
-
-private:
- unsigned int keyrand(unsigned int max_value, const byte *prevSbox);
- void makeonebox(byte *s, unsigned int i, unsigned int j);
-
- CRC32 crc;
- const byte *const key;
- const unsigned keysize;
- unsigned keyindex;
- const unsigned numrounds;
- const unsigned roundsize; // Number of bytes in one round of substitution boxes
- const unsigned blocksize;
-};
-
-Diamond2SboxMaker::Diamond2SboxMaker(const byte *external_key, unsigned int key_size, unsigned int rounds,
- bool lite)
- : key(external_key),
- keysize(key_size),
- keyindex(0),
- numrounds(rounds),
- roundsize(lite ? 2048 : 4096),
- blocksize(lite ? 8 : 16)
-{
- assert((rounds * blocksize) <= 255);
-}
-
-// Returns uniformly distributed pseudorandom value based on key[], sized keysize
-inline unsigned int Diamond2SboxMaker::keyrand(unsigned int max_value, const byte *prevSbox)
-{
- assert(max_value <= 255);
-
- if (!max_value) return 0;
-
- unsigned int mask, prandvalue, i;
-
- // Create a mask to get the minimum number of
- // bits to cover the range 0 to max_value.
- for (i=max_value, mask=0; i > 0; i = i >> 1)
- mask = (mask << 1) | 1;
-
- assert(i==0);
- do
- {
- if (prevSbox)
- crc.UpdateByte(prevSbox[key[keyindex++]]);
- else
- crc.UpdateByte(key[keyindex++]);
-
- if (keyindex >= keysize)
- {
- keyindex = 0; /* Recycle thru the key */
- crc.UpdateByte(byte(keysize));
- crc.UpdateByte(byte(keysize >> 8));
- }
- prandvalue = crc.GetCrcByte(0) & mask;
- if ((++i>97) && (prandvalue > max_value)) /* Don't loop forever. */
- prandvalue -= max_value; /* Introduce negligible bias. */
- }
- while (prandvalue > max_value); /* Discard out of range values. */
- return prandvalue;
-}
-
-void Diamond2SboxMaker::makeonebox(byte *s, unsigned int i, unsigned int j)
-{
- bool filled[256];
- byte *sbox = s + (roundsize*i) + (256*j);
- byte *prevSbox = (i||j) ? sbox-256 : 0;
-
- unsigned m;
- for (m = 0; m < 256; m++) /* The filled array is used to make sure that */
- filled[m] = false; /* each byte of the array is filled only once. */
- for (int n = 255; n >= 0 ; n--) /* n counts the number of bytes left to fill */
- {
- // pos is the position among the UNFILLED
- // components of the s array that the number n should be placed.
- unsigned pos = keyrand(n, prevSbox);
- unsigned p=0;
- while (filled[p]) p++;
- for (m=0; m<pos; m++)
- {
- p++;
- while (filled[p]) p++;
- }
- assert(p<256);
- sbox[p] = n;
- filled[p] = true;
- }
-}
-
-void Diamond2SboxMaker::MakeSbox(byte *s, CipherDir direction)
-{
- unsigned int i, j, k;
-
- for (i = 0; i < numrounds; i++)
- for (j = 0; j < blocksize; j++)
- makeonebox(s, i, j);
-
- if (direction==DECRYPTION)
- {
- SecByteBlock si(numrounds * roundsize);
- for (i = 0; i < numrounds; i++)
- for (j = 0; j < blocksize; j++)
- for (k = 0; k < 256; k++)
- *(si + (roundsize * i) + (256 * j) + *(s + (roundsize * i) + (256 * j) + k)) = k;
- memcpy(s, si, numrounds * roundsize);
- }
-}
-
-void Diamond2::Base::UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length, unsigned int rounds)
-{
- AssertValidKeyLength(length);
-
- numrounds = rounds;
- s.New(numrounds * ROUNDSIZE);
-
- Diamond2SboxMaker m(userKey, length, rounds, false);
- m.MakeSbox(s, direction);
-}
-
-inline void Diamond2::Base::substitute(int round, byte *x, const byte *y) const
-{
- const byte *sbox = s + (ROUNDSIZE*round);
- x[0] = sbox[0*256+y[0]];
- x[1] = sbox[1*256+y[1]];
- x[2] = sbox[2*256+y[2]];
- x[3] = sbox[3*256+y[3]];
- x[4] = sbox[4*256+y[4]];
- x[5] = sbox[5*256+y[5]];
- x[6] = sbox[6*256+y[6]];
- x[7] = sbox[7*256+y[7]];
- x[8] = sbox[8*256+y[8]];
- x[9] = sbox[9*256+y[9]];
- x[10] = sbox[10*256+y[10]];
- x[11] = sbox[11*256+y[11]];
- x[12] = sbox[12*256+y[12]];
- x[13] = sbox[13*256+y[13]];
- x[14] = sbox[14*256+y[14]];
- x[15] = sbox[15*256+y[15]];
-}
-
-#ifdef DIAMOND_USE_PERMTABLE
-
-inline void Diamond2::Base::permute(byte *a)
-{
-#ifdef IS_LITTLE_ENDIAN
- word32 temp0 = (a[0] | (word32(a[10])<<24)) & 0x80000001;
-#else
- word32 temp0 = ((word32(a[0])<<24) | a[10]) & 0x01000080;
-#endif
- temp0 |= permtable[0][a[1]] |
- permtable[1][a[2]] | permtable[2][a[3]] |
- permtable[3][a[4]] | permtable[4][a[5]] |
- permtable[5][a[6]] | permtable[6][a[7]] |
- permtable[7][a[8]] | permtable[8][a[9]];
-
-#ifdef IS_LITTLE_ENDIAN
- word32 temp1 = (a[4] | (word32(a[14])<<24)) & 0x80000001;
-#else
- word32 temp1 = ((word32(a[4])<<24) | a[14]) & 0x01000080;
-#endif
- temp1 |= permtable[0][a[5]] |
- permtable[1][a[6]] | permtable[2][a[7]] |
- permtable[3][a[8]] | permtable[4][a[9]] |
- permtable[5][a[10]] | permtable[6][a[11]] |
- permtable[7][a[12]] | permtable[8][a[13]];
-
-#ifdef IS_LITTLE_ENDIAN
- word32 temp2 = (a[8] | (word32(a[2])<<24)) & 0x80000001;
-#else
- word32 temp2 = ((word32(a[8])<<24) | a[2]) & 0x01000080;
-#endif
- temp2 |= permtable[0][a[9]] |
- permtable[1][a[10]] | permtable[2][a[11]] |
- permtable[3][a[12]] | permtable[4][a[13]] |
- permtable[5][a[14]] | permtable[6][a[15]] |
- permtable[7][a[0]] | permtable[8][a[1]];
-
-#ifdef IS_LITTLE_ENDIAN
- word32 temp3 = (a[12] | (word32(a[6])<<24)) & 0x80000001;
-#else
- word32 temp3 = ((word32(a[12])<<24) | a[6]) & 0x01000080;
-#endif
- ((word32 *)a)[3] = temp3 | permtable[0][a[13]] |
- permtable[1][a[14]] | permtable[2][a[15]] |
- permtable[3][a[0]] | permtable[4][a[1]] |
- permtable[5][a[2]] | permtable[6][a[3]] |
- permtable[7][a[4]] | permtable[8][a[5]];
-
- ((word32 *)a)[0] = temp0;
- ((word32 *)a)[1] = temp1;
- ((word32 *)a)[2] = temp2;
-}
-
-inline void Diamond2::Base::ipermute(byte *a)
-{
-#ifdef IS_LITTLE_ENDIAN
- word32 temp0 = (a[9] | (word32(a[3])<<24)) & 0x01000080;
-#else
- word32 temp0 = ((word32(a[9])<<24) | a[3]) & 0x80000001;
-#endif
- temp0 |= ipermtable[0][a[2]] |
- ipermtable[1][a[1]] | ipermtable[2][a[0]] |
- ipermtable[3][a[15]] | ipermtable[4][a[14]] |
- ipermtable[5][a[13]] | ipermtable[6][a[12]] |
- ipermtable[7][a[11]] | ipermtable[8][a[10]];
-
-#ifdef IS_LITTLE_ENDIAN
- word32 temp1 = (a[13] | (word32(a[7])<<24)) & 0x01000080;
-#else
- word32 temp1 = ((word32(a[13])<<24) | a[7]) & 0x80000001;
-#endif
- temp1 |= ipermtable[0][a[6]] |
- ipermtable[1][a[5]] | ipermtable[2][a[4]] |
- ipermtable[3][a[3]] | ipermtable[4][a[2]] |
- ipermtable[5][a[1]] | ipermtable[6][a[0]] |
- ipermtable[7][a[15]] | ipermtable[8][a[14]];
-
-#ifdef IS_LITTLE_ENDIAN
- word32 temp2 = (a[1] | (word32(a[11])<<24)) & 0x01000080;
-#else
- word32 temp2 = ((word32(a[1])<<24) | a[11]) & 0x80000001;
-#endif
- temp2 |= ipermtable[0][a[10]] |
- ipermtable[1][a[9]] | ipermtable[2][a[8]] |
- ipermtable[3][a[7]] | ipermtable[4][a[6]] |
- ipermtable[5][a[5]] | ipermtable[6][a[4]] |
- ipermtable[7][a[3]] | ipermtable[8][a[2]];
-
-#ifdef IS_LITTLE_ENDIAN
- word32 temp3 = (a[5] | (word32(a[15])<<24)) & 0x01000080;
-#else
- word32 temp3 = ((word32(a[5])<<24) | a[15]) & 0x80000001;
-#endif
- ((word32 *)a)[3] = temp3 | ipermtable[0][a[14]] |
- ipermtable[1][a[13]] | ipermtable[2][a[12]] |
- ipermtable[3][a[11]] | ipermtable[4][a[10]] |
- ipermtable[5][a[9]] | ipermtable[6][a[8]] |
- ipermtable[7][a[7]] | ipermtable[8][a[6]];
-
- ((word32 *)a)[0] = temp0;
- ((word32 *)a)[1] = temp1;
- ((word32 *)a)[2] = temp2;
-}
-
-#else // DIAMOND_USE_PERMTABLE
-
-inline void Diamond2::Base::permute(byte *x)
-{
- byte y[16];
-
- y[0] = (x[0] & 1) | (x[1] & 2) | (x[2] & 4) |
- (x[3] & 8) | (x[4] & 16) | (x[5] & 32) |
- (x[6] & 64) | (x[7] & 128);
- y[1] = (x[1] & 1) | (x[2] & 2) | (x[3] & 4) |
- (x[4] & 8) | (x[5] & 16) | (x[6] & 32) |
- (x[7] & 64) | (x[8] & 128);
- y[2] = (x[2] & 1) | (x[3] & 2) | (x[4] & 4) |
- (x[5] & 8) | (x[6] & 16) | (x[7] & 32) |
- (x[8] & 64) | (x[9] & 128);
- y[3] = (x[3] & 1) | (x[4] & 2) | (x[5] & 4) |
- (x[6] & 8) | (x[7] & 16) | (x[8] & 32) |
- (x[9] & 64) | (x[10] & 128);
- y[4] = (x[4] & 1) | (x[5] & 2) | (x[6] & 4) |
- (x[7] & 8) | (x[8] & 16) | (x[9] & 32) |
- (x[10] & 64) | (x[11] & 128);
- y[5] = (x[5] & 1) | (x[6] & 2) | (x[7] & 4) |
- (x[8] & 8) | (x[9] & 16) | (x[10] & 32) |
- (x[11] & 64) | (x[12] & 128);
- y[6] = (x[6] & 1) | (x[7] & 2) | (x[8] & 4) |
- (x[9] & 8) | (x[10] & 16) | (x[11] & 32) |
- (x[12] & 64) | (x[13] & 128);
- y[7] = (x[7] & 1) | (x[8] & 2) | (x[9] & 4) |
- (x[10] & 8) | (x[11] & 16) | (x[12] & 32) |
- (x[13] & 64) | (x[14] & 128);
- y[8] = (x[8] & 1) | (x[9] & 2) | (x[10] & 4) |
- (x[11] & 8) | (x[12] & 16) | (x[13] & 32) |
- (x[14] & 64) | (x[15] & 128);
- y[9] = (x[9] & 1) | (x[10] & 2) | (x[11] & 4) |
- (x[12] & 8) | (x[13] & 16) | (x[14] & 32) |
- (x[15] & 64) | (x[0] & 128);
- y[10] = (x[10] & 1) | (x[11] & 2) | (x[12] & 4) |
- (x[13] & 8) | (x[14] & 16) | (x[15] & 32) |
- (x[0] & 64) | (x[1] & 128);
- y[11] = (x[11] & 1) | (x[12] & 2) | (x[13] & 4) |
- (x[14] & 8) | (x[15] & 16) | (x[0] & 32) |
- (x[1] & 64) | (x[2] & 128);
- y[12] = (x[12] & 1) | (x[13] & 2) | (x[14] & 4) |
- (x[15] & 8) | (x[0] & 16) | (x[1] & 32) |
- (x[2] & 64) | (x[3] & 128);
- y[13] = (x[13] & 1) | (x[14] & 2) | (x[15] & 4) |
- (x[0] & 8) | (x[1] & 16) | (x[2] & 32) |
- (x[3] & 64) | (x[4] & 128);
- y[14] = (x[14] & 1) | (x[15] & 2) | (x[0] & 4) |
- (x[1] & 8) | (x[2] & 16) | (x[3] & 32) |
- (x[4] & 64) | (x[5] & 128);
- y[15] = (x[15] & 1) | (x[0] & 2) | (x[1] & 4) |
- (x[2] & 8) | (x[3] & 16) | (x[4] & 32) |
- (x[5] & 64) | (x[6] & 128);
-
- memcpy(x, y, 16);
-}
-
-inline void Diamond2::Base::ipermute(byte *x)
-{
- byte y[16];
-
- y[0] = (x[0] & 1) | (x[15] & 2) | (x[14] & 4) |
- (x[13] & 8) | (x[12] & 16) | (x[11] & 32) |
- (x[10] & 64) | (x[9] & 128);
- y[1] = (x[1] & 1) | (x[0] & 2) | (x[15] & 4) |
- (x[14] & 8) | (x[13] & 16) | (x[12] & 32) |
- (x[11] & 64) | (x[10] & 128);
- y[2] = (x[2] & 1) | (x[1] & 2) | (x[0] & 4) |
- (x[15] & 8) | (x[14] & 16) | (x[13] & 32) |
- (x[12] & 64) | (x[11] & 128);
- y[3] = (x[3] & 1) | (x[2] & 2) | (x[1] & 4) |
- (x[0] & 8) | (x[15] & 16) | (x[14] & 32) |
- (x[13] & 64) | (x[12] & 128);
- y[4] = (x[4] & 1) | (x[3] & 2) | (x[2] & 4) |
- (x[1] & 8) | (x[0] & 16) | (x[15] & 32) |
- (x[14] & 64) | (x[13] & 128);
- y[5] = (x[5] & 1) | (x[4] & 2) | (x[3] & 4) |
- (x[2] & 8) | (x[1] & 16) | (x[0] & 32) |
- (x[15] & 64) | (x[14] & 128);
- y[6] = (x[6] & 1) | (x[5] & 2) | (x[4] & 4) |
- (x[3] & 8) | (x[2] & 16) | (x[1] & 32) |
- (x[0] & 64) | (x[15] & 128);
- y[7] = (x[7] & 1) | (x[6] & 2) | (x[5] & 4) |
- (x[4] & 8) | (x[3] & 16) | (x[2] & 32) |
- (x[1] & 64) | (x[0] & 128);
- y[8] = (x[8] & 1) | (x[7] & 2) | (x[6] & 4) |
- (x[5] & 8) | (x[4] & 16) | (x[3] & 32) |
- (x[2] & 64) | (x[1] & 128);
- y[9] = (x[9] & 1) | (x[8] & 2) | (x[7] & 4) |
- (x[6] & 8) | (x[5] & 16) | (x[4] & 32) |
- (x[3] & 64) | (x[2] & 128);
- y[10] = (x[10] & 1) | (x[9] & 2) | (x[8] & 4) |
- (x[7] & 8) | (x[6] & 16) | (x[5] & 32) |
- (x[4] & 64) | (x[3] & 128);
- y[11] = (x[11] & 1) | (x[10] & 2) | (x[9] & 4) |
- (x[8] & 8) | (x[7] & 16) | (x[6] & 32) |
- (x[5] & 64) | (x[4] & 128);
- y[12] = (x[12] & 1) | (x[11] & 2) | (x[10] & 4) |
- (x[9] & 8) | (x[8] & 16) | (x[7] & 32) |
- (x[6] & 64) | (x[5] & 128);
- y[13] = (x[13] & 1) | (x[12] & 2) | (x[11] & 4) |
- (x[10] & 8) | (x[9] & 16) | (x[8] & 32) |
- (x[7] & 64) | (x[6] & 128);
- y[14] = (x[14] & 1) | (x[13] & 2) | (x[12] & 4) |
- (x[11] & 8) | (x[10] & 16) | (x[9] & 32) |
- (x[8] & 64) | (x[7] & 128);
- y[15] = (x[15] & 1) | (x[14] & 2) | (x[13] & 4) |
- (x[12] & 8) | (x[11] & 16) | (x[10] & 32) |
- (x[9] & 64) | (x[8] & 128);
-
- memcpy(x, y, 16);
-}
-
-#endif // DIAMOND_USE_PERMTABLE
-
-void Diamond2::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
-{
- const byte *x = inBlock;
- byte y[16];
-
- substitute(0, y, x);
- for (int round=1; round < numrounds; round++)
- {
- permute(y);
- substitute(round, y, y);
- }
-
- if (xorBlock)
- xorbuf(outBlock, xorBlock, y, BLOCKSIZE);
- else
- memcpy(outBlock, y, BLOCKSIZE);
-}
-
-void Diamond2::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
-{
- const byte *x = inBlock;
- byte y[16];
-
- substitute(numrounds-1, y, x);
- for (int round=numrounds-2; round >= 0; round--)
- {
- ipermute(y);
- substitute(round, y, y);
- }
-
- if (xorBlock)
- xorbuf(outBlock, xorBlock, y, BLOCKSIZE);
- else
- memcpy(outBlock, y, BLOCKSIZE);
-}
-
-void Diamond2Lite::Base::UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length, unsigned int rounds)
-{
- AssertValidKeyLength(length);
-
- numrounds = rounds;
- s.New(numrounds * ROUNDSIZE);
-
- Diamond2SboxMaker m(userKey, length, rounds, true);
- m.MakeSbox(s, direction);
-}
-
-inline void Diamond2Lite::Base::substitute(int round, byte *x, const byte *y) const
-{
- const byte *sbox = s + (ROUNDSIZE*round);
- x[0] = sbox[0*256+y[0]];
- x[1] = sbox[1*256+y[1]];
- x[2] = sbox[2*256+y[2]];
- x[3] = sbox[3*256+y[3]];
- x[4] = sbox[4*256+y[4]];
- x[5] = sbox[5*256+y[5]];
- x[6] = sbox[6*256+y[6]];
- x[7] = sbox[7*256+y[7]];
-}
-
-#ifdef DIAMOND_USE_PERMTABLE
-
-inline void Diamond2Lite::Base::permute(byte *a)
-{
- word32 temp = permtable[0][a[0]] | permtable[1][a[1]] |
- permtable[2][a[2]] | permtable[3][a[3]] |
- permtable[4][a[4]] | permtable[5][a[5]] |
- permtable[6][a[6]] | permtable[7][a[7]];
-
- ((word32 *)a)[1] = permtable[0][a[4]] | permtable[1][a[5]] |
- permtable[2][a[6]] | permtable[3][a[7]] |
- permtable[4][a[0]] | permtable[5][a[1]] |
- permtable[6][a[2]] | permtable[7][a[3]];
-
- ((word32 *)a)[0] = temp;
-}
-
-inline void Diamond2Lite::Base::ipermute(byte *a)
-{
- word32 temp = ipermtable[0][a[0]] | ipermtable[1][a[1]] |
- ipermtable[2][a[2]] | ipermtable[3][a[3]] |
- ipermtable[4][a[4]] | ipermtable[5][a[5]] |
- ipermtable[6][a[6]] | ipermtable[7][a[7]];
-
- ((word32 *)a)[1] = ipermtable[0][a[4]] | ipermtable[1][a[5]] |
- ipermtable[2][a[6]] | ipermtable[3][a[7]] |
- ipermtable[4][a[0]] | ipermtable[5][a[1]] |
- ipermtable[6][a[2]] | ipermtable[7][a[3]];
-
- ((word32 *)a)[0] = temp;
-}
-
-#else
-
-inline void Diamond2Lite::Base::permute(byte *a)
-{
- byte b[8];
-
- b[0] = (a[0] & 1) + (a[1] & 2) + (a[2] & 4) + (a[3] & 8) + (a[4] & 0x10) +
- (a[5] & 0x20) + (a[6] & 0x40) + (a[7] & 0x80);
- b[1] = (a[1] & 1) + (a[2] & 2) + (a[3] & 4) + (a[4] & 8) + (a[5] & 0x10) +
- (a[6] & 0x20) + (a[7] & 0x40) + (a[0] & 0x80);
- b[2] = (a[2] & 1) + (a[3] & 2) + (a[4] & 4) + (a[5] & 8) + (a[6] & 0x10) +
- (a[7] & 0x20) + (a[0] & 0x40) + (a[1] & 0x80);
- b[3] = (a[3] & 1) + (a[4] & 2) + (a[5] & 4) + (a[6] & 8) + (a[7] & 0x10) +
- (a[0] & 0x20) + (a[1] & 0x40) + (a[2] & 0x80);
- b[4] = (a[4] & 1) + (a[5] & 2) + (a[6] & 4) + (a[7] & 8) + (a[0] & 0x10) +
- (a[1] & 0x20) + (a[2] & 0x40) + (a[3] & 0x80);
- b[5] = (a[5] & 1) + (a[6] & 2) + (a[7] & 4) + (a[0] & 8) + (a[1] & 0x10) +
- (a[2] & 0x20) + (a[3] & 0x40) + (a[4] & 0x80);
- b[6] = (a[6] & 1) + (a[7] & 2) + (a[0] & 4) + (a[1] & 8) + (a[2] & 0x10) +
- (a[3] & 0x20) + (a[4] & 0x40) + (a[5] & 0x80);
- b[7] = (a[7] & 1) + (a[0] & 2) + (a[1] & 4) + (a[2] & 8) + (a[3] & 0x10) +
- (a[4] & 0x20) + (a[5] & 0x40) + (a[6] & 0x80);
-
- memcpy(a, b, 8);
-}
-
-inline void Diamond2Lite::Base::ipermute(byte *b)
-{
- byte a[8];
-
- a[0] = (b[0] & 1) + (b[7] & 2) + (b[6] & 4) + (b[5] & 8) + (b[4] & 0x10) +
- (b[3] & 0x20) + (b[2] & 0x40) + (b[1] & 0x80);
- a[1] = (b[1] & 1) + (b[0] & 2) + (b[7] & 4) + (b[6] & 8) + (b[5] & 0x10) +
- (b[4] & 0x20) + (b[3] & 0x40) + (b[2] & 0x80);
- a[2] = (b[2] & 1) + (b[1] & 2) + (b[0] & 4) + (b[7] & 8) + (b[6] & 0x10) +
- (b[5] & 0x20) + (b[4] & 0x40) + (b[3] & 0x80);
- a[3] = (b[3] & 1) + (b[2] & 2) + (b[1] & 4) + (b[0] & 8) + (b[7] & 0x10) +
- (b[6] & 0x20) + (b[5] & 0x40) + (b[4] & 0x80);
- a[4] = (b[4] & 1) + (b[3] & 2) + (b[2] & 4) + (b[1] & 8) + (b[0] & 0x10) +
- (b[7] & 0x20) + (b[6] & 0x40) + (b[5] & 0x80);
- a[5] = (b[5] & 1) + (b[4] & 2) + (b[3] & 4) + (b[2] & 8) + (b[1] & 0x10) +
- (b[0] & 0x20) + (b[7] & 0x40) + (b[6] & 0x80);
- a[6] = (b[6] & 1) + (b[5] & 2) + (b[4] & 4) + (b[3] & 8) + (b[2] & 0x10) +
- (b[1] & 0x20) + (b[0] & 0x40) + (b[7] & 0x80);
- a[7] = (b[7] & 1) + (b[6] & 2) + (b[5] & 4) + (b[4] & 8) + (b[3] & 0x10) +
- (b[2] & 0x20) + (b[1] & 0x40) + (b[0] & 0x80);
-
- memcpy(b, a, 8);
-}
-
-#endif // DIAMOND_USE_PERMTABLE
-
-void Diamond2Lite::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
-{
- const byte *x = inBlock;
- byte y[8];
-
- substitute(0, y, x);
- for (int round=1; round < numrounds; round++)
- {
- permute(y);
- substitute(round, y, y);
- }
-
- if (xorBlock)
- xorbuf(outBlock, xorBlock, y, BLOCKSIZE);
- else
- memcpy(outBlock, y, BLOCKSIZE);
-}
-
-void Diamond2Lite::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
-{
- const byte *x = inBlock;
- byte y[8];
-
- substitute(numrounds-1, y, x);
- for (int round=numrounds-2; round >= 0; round--)
- {
- ipermute(y);
- substitute(round, y, y);
- }
-
- if (xorBlock)
- xorbuf(outBlock, xorBlock, y, BLOCKSIZE);
- else
- memcpy(outBlock, y, BLOCKSIZE);
-}
-
-NAMESPACE_END
diff --git a/diamond.h b/diamond.h
deleted file mode 100644
index e5ac3e71..00000000
--- a/diamond.h
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef CRYPTOPP_DIAMOND_H
-#define CRYPTOPP_DIAMOND_H
-
-/** \file
-*/
-
-#include "seckey.h"
-#include "secblock.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-struct Diamond2_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 1, 256>, public VariableRounds<10>
-{
- static const char *StaticAlgorithmName() {return "Diamond2";}
-};
-
-/// <a href="http://www.weidai.com/scan-mirror/cs.html#Diamond2">Diamond2</a>
-class Diamond2 : public Diamond2_Info, public BlockCipherDocumentation
-{
- class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<Diamond2_Info>
- {
- public:
- void UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length, unsigned int rounds);
-
- protected:
- enum {ROUNDSIZE=4096};
- inline void substitute(int round, byte *x, const byte *y) const;
-
- int numrounds;
- SecByteBlock s; // Substitution boxes
-
- static inline void permute(byte *);
- static inline void ipermute(byte *);
-#ifdef DIAMOND_USE_PERMTABLE
- static const word32 permtable[9][256];
- static const word32 ipermtable[9][256];
-#endif
- };
-
- class CRYPTOPP_NO_VTABLE Enc : public Base
- {
- public:
- void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
- };
-
- class CRYPTOPP_NO_VTABLE Dec : public Base
- {
- public:
- void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
- };
-
-public:
- typedef BlockCipherFinal<ENCRYPTION, Enc> Encryption;
- typedef BlockCipherFinal<DECRYPTION, Dec> Decryption;
-};
-
-typedef Diamond2::Encryption Diamond2Encryption;
-typedef Diamond2::Decryption Diamond2Decryption;
-
-struct Diamond2Lite_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 1, 256>, public VariableRounds<8>
-{
- static const char *StaticAlgorithmName() {return "Diamond2Lite";}
-};
-
-/// <a href="http://www.weidai.com/scan-mirror/cs.html#Diamond2">Diamond2Lite</a>
-class Diamond2Lite : public Diamond2Lite_Info, public BlockCipherDocumentation
-{
- class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<Diamond2Lite_Info>
- {
- public:
- void UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length, unsigned int rounds);
-
- protected:
- enum {ROUNDSIZE=2048};
- inline void substitute(int round, byte *x, const byte *y) const;
- int numrounds;
- SecByteBlock s; // Substitution boxes
-
- static inline void permute(byte *);
- static inline void ipermute(byte *);
- #ifdef DIAMOND_USE_PERMTABLE
- static const word32 permtable[8][256];
- static const word32 ipermtable[8][256];
- #endif
- };
-
- class CRYPTOPP_NO_VTABLE Enc : public Base
- {
- public:
- void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
- };
-
- class CRYPTOPP_NO_VTABLE Dec : public Base
- {
- public:
- void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
- };
-
-public:
- typedef BlockCipherFinal<ENCRYPTION, Enc> Encryption;
- typedef BlockCipherFinal<DECRYPTION, Dec> Decryption;
-};
-
-typedef Diamond2Lite::Encryption Diamond2LiteEncryption;
-typedef Diamond2Lite::Decryption Diamond2LiteDecryption;
-
-NAMESPACE_END
-
-#endif
diff --git a/diamondt.cpp b/diamondt.cpp
deleted file mode 100644
index d6277b09..00000000
--- a/diamondt.cpp
+++ /dev/null
@@ -1,2270 +0,0 @@
-#include "pch.h"
-#include "diamond.h"
-
-#ifdef DIAMOND_USE_PERMTABLE
-
-NAMESPACE_BEGIN(CryptoPP)
-
-#ifndef IS_LITTLE_ENDIAN
-const word32 Diamond2Lite::Base::permtable[8][256] =
-{{0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020},
-
-{0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040},
-
-{0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180},
-
-{0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201},
-
-{0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402},
-
-{0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010}};
-#else
-const word32 Diamond2Lite::Base::permtable[8][256] =
-{{0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001},
-
-{0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102},
-
-{0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204},
-
-{0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408},
-
-{0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810},
-
-{0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080}};
-#endif
-
-#ifndef IS_LITTLE_ENDIAN
-const word32 Diamond2Lite::Base::ipermtable[8][256] =
-{{0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408},
-
-{0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204,
-0x80000000,0x80010000,0x80000200,0x80010200,0x80000004,0x80010004,0x80000204,0x80010204},
-
-{0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x40000000,0x40000100,0x40000002,0x40000102,0x40000000,0x40000100,0x40000002,0x40000102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x800000,0x800100,0x800002,0x800102,0x800000,0x800100,0x800002,0x800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102,
-0x40800000,0x40800100,0x40800002,0x40800102,0x40800000,0x40800100,0x40800002,0x40800102},
-
-{0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,0x20000000,0x20000001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,0x400000,0x400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,0x20400000,0x20400001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,0x8000,0x8001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,0x20008000,0x20008001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,0x408000,0x408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,
-0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001,0x20408000,0x20408001},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040},
-
-{0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020},
-
-{0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810}};
-#else
-const word32 Diamond2Lite::Base::ipermtable[8][256] =
-{{0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201},
-
-{0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180,
-0x80,0x180,0x20080,0x20180,0x4000080,0x4000180,0x4020080,0x4020180},
-
-{0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x40,0x10040,0x2000040,0x2010040,0x40,0x10040,0x2000040,0x2010040,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8000,0x18000,0x2008000,0x2018000,0x8000,0x18000,0x2008000,0x2018000,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040,
-0x8040,0x18040,0x2008040,0x2018040,0x8040,0x18040,0x2008040,0x2018040},
-
-{0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,0x0,0x1000000,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,0x20,0x1000020,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,0x4000,0x1004000,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,0x4020,0x1004020,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,0x800000,0x1800000,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,0x800020,0x1800020,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,0x804000,0x1804000,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,
-0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020,0x804020,0x1804020},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008},
-
-{0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804},
-
-{0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402}};
-#endif
-
-#ifndef IS_LITTLE_ENDIAN
-const word32 Diamond2::Base::permtable[9][256] =
-{{0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000},
-
-{0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100},
-
-{0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201},
-
-{0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402},
-
-{0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040}};
-#else
-const word32 Diamond2::Base::permtable[9][256] =
-{{0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102},
-
-{0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204},
-
-{0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408},
-
-{0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810},
-
-{0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000}};
-#endif
-
-#ifndef IS_LITTLE_ENDIAN
-const word32 Diamond2::Base::ipermtable[9][256] =
-{{0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102,
-0x0,0x100,0x2,0x102,0x0,0x100,0x2,0x102},
-
-{0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204,
-0x0,0x10000,0x200,0x10200,0x4,0x10004,0x204,0x10204},
-
-{0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408,
-0x0,0x1000000,0x20000,0x1020000,0x400,0x1000400,0x20400,0x1020400,
-0x8,0x1000008,0x20008,0x1020008,0x408,0x1000408,0x20408,0x1020408},
-
-{0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810,
-0x0,0x0,0x2000000,0x2000000,0x40000,0x40000,0x2040000,0x2040000,
-0x800,0x800,0x2000800,0x2000800,0x40800,0x40800,0x2040800,0x2040800,
-0x10,0x10,0x2000010,0x2000010,0x40010,0x40010,0x2040010,0x2040010,
-0x810,0x810,0x2000810,0x2000810,0x40810,0x40810,0x2040810,0x2040810},
-
-{0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020,
-0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4000000,0x4000000,
-0x80000,0x80000,0x80000,0x80000,0x4080000,0x4080000,0x4080000,0x4080000,
-0x1000,0x1000,0x1000,0x1000,0x4001000,0x4001000,0x4001000,0x4001000,
-0x81000,0x81000,0x81000,0x81000,0x4081000,0x4081000,0x4081000,0x4081000,
-0x20,0x20,0x20,0x20,0x4000020,0x4000020,0x4000020,0x4000020,
-0x80020,0x80020,0x80020,0x80020,0x4080020,0x4080020,0x4080020,0x4080020,
-0x1020,0x1020,0x1020,0x1020,0x4001020,0x4001020,0x4001020,0x4001020,
-0x81020,0x81020,0x81020,0x81020,0x4081020,0x4081020,0x4081020,0x4081020},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000,
-0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,
-0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,0x8100000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,0x8002000,
-0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,0x102000,
-0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,0x8102000,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,0x8000040,
-0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,0x100040,
-0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,0x8100040,
-0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,0x2040,
-0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,0x8002040,
-0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,0x102040,
-0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040,0x8102040},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,0x10200000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,0x10004000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,0x204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,0x10204000,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,0x10000080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,0x200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,0x10200080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,0x4080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,0x10004080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,0x204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,
-0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080,0x10204080},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,0x20400000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,0x20008000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,0x408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,
-0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000,0x20408000},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,
-0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000,0x40800000}};
-#else
-const word32 Diamond2::Base::ipermtable[9][256] =
-{{0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000,
-0x0,0x10000,0x2000000,0x2010000,0x0,0x10000,0x2000000,0x2010000},
-
-{0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100,
-0x0,0x100,0x20000,0x20100,0x4000000,0x4000100,0x4020000,0x4020100},
-
-{0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201,
-0x0,0x1,0x200,0x201,0x40000,0x40001,0x40200,0x40201,
-0x8000000,0x8000001,0x8000200,0x8000201,0x8040000,0x8040001,0x8040200,0x8040201},
-
-{0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402,
-0x0,0x0,0x2,0x2,0x400,0x400,0x402,0x402,
-0x80000,0x80000,0x80002,0x80002,0x80400,0x80400,0x80402,0x80402,
-0x10000000,0x10000000,0x10000002,0x10000002,0x10000400,0x10000400,0x10000402,0x10000402,
-0x10080000,0x10080000,0x10080002,0x10080002,0x10080400,0x10080400,0x10080402,0x10080402},
-
-{0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804,
-0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,
-0x800,0x800,0x800,0x800,0x804,0x804,0x804,0x804,
-0x100000,0x100000,0x100000,0x100000,0x100004,0x100004,0x100004,0x100004,
-0x100800,0x100800,0x100800,0x100800,0x100804,0x100804,0x100804,0x100804,
-0x20000000,0x20000000,0x20000000,0x20000000,0x20000004,0x20000004,0x20000004,0x20000004,
-0x20000800,0x20000800,0x20000800,0x20000800,0x20000804,0x20000804,0x20000804,0x20000804,
-0x20100000,0x20100000,0x20100000,0x20100000,0x20100004,0x20100004,0x20100004,0x20100004,
-0x20100800,0x20100800,0x20100800,0x20100800,0x20100804,0x20100804,0x20100804,0x20100804},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
-0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
-0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,
-0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,
-0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,0x200008,
-0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,0x201000,
-0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,0x201008,
-0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,
-0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,0x40000008,
-0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,0x40001000,
-0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,0x40001008,
-0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,0x40200000,
-0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,0x40200008,
-0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,0x40201000,
-0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008,0x40201008},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,0x2010,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,0x400010,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,0x402000,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,0x402010,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,0x80000000,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,0x80000010,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,0x80002000,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,0x80002010,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,0x80400000,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,0x80400010,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,0x80402000,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,
-0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010,0x80402010},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,0x4020,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,0x800020,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,0x804000,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,
-0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020,0x804020},
-
-{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,
-0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040,0x8040}};
-#endif
-
-NAMESPACE_END
-
-#endif // DIAMOND_USE_PERMTABLE
diff --git a/elgamal.h b/elgamal.h
index 1779f44f..3d6734ec 100644
--- a/elgamal.h
+++ b/elgamal.h
@@ -106,14 +106,14 @@ struct ElGamal
static const char * StaticAlgorithmName() {return "ElgamalEnc/Crypto++Padding";}
- class CRYPTOPP_NO_VTABLE EncryptorImpl : public ElGamalObjectImpl<DL_EncryptorBase<Integer>, SchemeOptions, SchemeOptions::PublicKey>, public PublicKeyCopier<SchemeOptions>
+ class EncryptorImpl : public ElGamalObjectImpl<DL_EncryptorBase<Integer>, SchemeOptions, SchemeOptions::PublicKey>, public PublicKeyCopier<SchemeOptions>
{
public:
void CopyKeyInto(SchemeOptions::PublicKey &key) const
{key = GetKey();}
};
- class CRYPTOPP_NO_VTABLE DecryptorImpl : public ElGamalObjectImpl<DL_DecryptorBase<Integer>, SchemeOptions, SchemeOptions::PrivateKey>, public PrivateKeyCopier<SchemeOptions>
+ class DecryptorImpl : public ElGamalObjectImpl<DL_DecryptorBase<Integer>, SchemeOptions, SchemeOptions::PrivateKey>, public PrivateKeyCopier<SchemeOptions>
{
public:
void CopyKeyInto(SchemeOptions::PublicKey &key) const
diff --git a/factory.h b/factory.h
index 1dd0bdc3..b9c96e6a 100644
--- a/factory.h
+++ b/factory.h
@@ -32,7 +32,7 @@ public:
{
for (CPP_TYPENAME Map::iterator i = m_map.begin(); i != m_map.end(); ++i)
{
- delete i->second;
+ delete (ObjectFactory<AbstractClass> *)i->second;
i->second = NULL;
}
}
@@ -45,7 +45,7 @@ public:
const ObjectFactory<AbstractClass> * GetFactory(const char *name) const
{
CPP_TYPENAME Map::const_iterator i = m_map.find(name);
- return i == m_map.end() ? NULL : i->second;
+ return i == m_map.end() ? NULL : (ObjectFactory<AbstractClass> *)i->second;
}
AbstractClass *CreateObject(const char *name) const
@@ -58,7 +58,8 @@ public:
static ObjectFactoryRegistry<AbstractClass, instance> & Registry(...);
private:
- typedef std::map<std::string, ObjectFactory<AbstractClass> *> Map;
+ // use void * instead of ObjectFactory<AbstractClass> * to save code size
+ typedef std::map<std::string, void *> Map;
Map m_map;
};
diff --git a/misc.h b/misc.h
index c90cf316..4fc02c00 100644
--- a/misc.h
+++ b/misc.h
@@ -33,12 +33,12 @@ class CRYPTOPP_DLL Empty
};
template <class BASE1, class BASE2>
-class TwoBases : public BASE1, public BASE2
+class CRYPTOPP_NO_VTABLE TwoBases : public BASE1, public BASE2
{
};
template <class BASE1, class BASE2, class BASE3>
-class ThreeBases : public BASE1, public BASE2, public BASE3
+class CRYPTOPP_NO_VTABLE ThreeBases : public BASE1, public BASE2, public BASE3
{
};
@@ -203,6 +203,30 @@ inline CipherDir GetCipherDir(const T &obj)
return obj.IsForwardTransformation() ? ENCRYPTION : DECRYPTION;
}
+// This function safely initializes a static object in a multithreaded environment without using locks.
+// It may leak memory when two threads try to initialize the static object at the same time
+// but this should be acceptable since each static object is only initialized once per session.
+template <class T, class F>
+T & StaticObject(F NewT, T *dummy=NULL)
+{
+ static member_ptr<T> s_pObject;
+ static char s_objectState = 0;
+
+ switch (s_objectState)
+ {
+ case 0:
+ s_objectState = 1;
+ s_pObject.reset(NewT());
+ s_objectState = 2;
+ break;
+ case 1:
+ while (s_objectState == 1) {}
+ default:
+ break;
+ }
+ return *s_pObject;
+};
+
// ************** rotate functions ***************
template <class T> inline T rotlFixed(T x, unsigned int y)
diff --git a/nbtheory.cpp b/nbtheory.cpp
index d691e43c..2a517d7c 100644
--- a/nbtheory.cpp
+++ b/nbtheory.cpp
@@ -13,103 +13,45 @@
NAMESPACE_BEGIN(CryptoPP)
-const unsigned int maxPrimeTableSize = 3511; // last prime 32719
-const word lastSmallPrime = 32719;
-unsigned int primeTableSize=552;
-
-word primeTable[maxPrimeTableSize] =
- {2, 3, 5, 7, 11, 13, 17, 19,
- 23, 29, 31, 37, 41, 43, 47, 53,
- 59, 61, 67, 71, 73, 79, 83, 89,
- 97, 101, 103, 107, 109, 113, 127, 131,
- 137, 139, 149, 151, 157, 163, 167, 173,
- 179, 181, 191, 193, 197, 199, 211, 223,
- 227, 229, 233, 239, 241, 251, 257, 263,
- 269, 271, 277, 281, 283, 293, 307, 311,
- 313, 317, 331, 337, 347, 349, 353, 359,
- 367, 373, 379, 383, 389, 397, 401, 409,
- 419, 421, 431, 433, 439, 443, 449, 457,
- 461, 463, 467, 479, 487, 491, 499, 503,
- 509, 521, 523, 541, 547, 557, 563, 569,
- 571, 577, 587, 593, 599, 601, 607, 613,
- 617, 619, 631, 641, 643, 647, 653, 659,
- 661, 673, 677, 683, 691, 701, 709, 719,
- 727, 733, 739, 743, 751, 757, 761, 769,
- 773, 787, 797, 809, 811, 821, 823, 827,
- 829, 839, 853, 857, 859, 863, 877, 881,
- 883, 887, 907, 911, 919, 929, 937, 941,
- 947, 953, 967, 971, 977, 983, 991, 997,
- 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049,
- 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097,
- 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163,
- 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223,
- 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283,
- 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321,
- 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423,
- 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459,
- 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511,
- 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571,
- 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619,
- 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693,
- 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747,
- 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811,
- 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877,
- 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949,
- 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003,
- 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069,
- 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129,
- 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203,
- 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267,
- 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311,
- 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377,
- 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423,
- 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503,
- 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579,
- 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657,
- 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693,
- 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741,
- 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801,
- 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861,
- 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939,
- 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011,
- 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079,
- 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167,
- 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221,
- 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301,
- 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347,
- 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413,
- 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491,
- 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541,
- 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607,
- 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671,
- 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727,
- 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797,
- 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863,
- 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923,
- 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003};
-
-void BuildPrimeTable()
+const word s_lastSmallPrime = 32719;
+
+std::vector<word> * NewPrimeTable()
{
- unsigned int p=primeTable[primeTableSize-1];
- for (unsigned int i=primeTableSize; i<maxPrimeTableSize; i++)
+ const unsigned int maxPrimeTableSize = 3511;
+
+ std::auto_ptr<std::vector<word> > pPrimeTable(new std::vector<word>);
+ std::vector<word> &primeTable = *pPrimeTable;
+ primeTable.reserve(maxPrimeTableSize);
+
+ primeTable.push_back(2);
+ unsigned int testEntriesEnd = 1;
+
+ for (unsigned int p=3; p<=s_lastSmallPrime; p+=2)
{
- int j;
- do
+ for (unsigned int j=1; j<testEntriesEnd; j++)
+ if (p%primeTable[j] == 0)
+ break;
+ if (j == testEntriesEnd)
{
- p+=2;
- for (j=1; j<54; j++)
- if (p%primeTable[j] == 0)
- break;
- } while (j!=54);
- primeTable[i] = p;
+ primeTable.push_back(p);
+ testEntriesEnd = STDMIN(54U, primeTable.size());
+ }
}
- primeTableSize = maxPrimeTableSize;
- assert(primeTable[primeTableSize-1] == lastSmallPrime);
+
+ return pPrimeTable.release();
+}
+
+const word * GetPrimeTable(unsigned int &size)
+{
+ std::vector<word> &primeTable = StaticObject<std::vector<word> >(&NewPrimeTable);
+ size = primeTable.size();
+ return &primeTable[0];
}
bool IsSmallPrime(const Integer &p)
{
- BuildPrimeTable();
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
if (p.IsPositive() && p <= primeTable[primeTableSize-1])
return std::binary_search(primeTable, primeTable+primeTableSize, (word)p.ConvertToLong());
@@ -119,6 +61,9 @@ bool IsSmallPrime(const Integer &p)
bool TrialDivision(const Integer &p, unsigned bound)
{
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
+
assert(primeTable[primeTableSize-1] >= bound);
unsigned int i;
@@ -134,7 +79,8 @@ bool TrialDivision(const Integer &p, unsigned bound)
bool SmallDivisorsTest(const Integer &p)
{
- BuildPrimeTable();
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
return !TrialDivision(p, primeTable[primeTableSize-1]);
}
@@ -273,9 +219,9 @@ bool IsStrongLucasProbablePrime(const Integer &n)
bool IsPrime(const Integer &p)
{
- static const Integer lastSmallPrimeSquared = Integer(lastSmallPrime).Squared();
+ static const Integer lastSmallPrimeSquared = Integer(s_lastSmallPrime).Squared();
- if (p <= lastSmallPrime)
+ if (p <= s_lastSmallPrime)
return IsSmallPrime(p);
else if (p <= lastSmallPrimeSquared)
return SmallDivisorsTest(p);
@@ -384,7 +330,8 @@ void PrimeSieve::SieveSingle(std::vector<bool> &sieve, word p, const Integer &fi
void PrimeSieve::DoSieve()
{
- BuildPrimeTable();
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
const unsigned int maxSieveSize = 32768;
unsigned int sieveSize = STDMIN(Integer(maxSieveSize), (m_last-m_first)/m_step+1).ConvertToLong();
@@ -431,11 +378,12 @@ bool FirstPrime(Integer &p, const Integer &max, const Integer &equiv, const Inte
return false;
}
- BuildPrimeTable();
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
if (p <= primeTable[primeTableSize-1])
{
- word *pItr;
+ const word *pItr;
--p;
if (p.IsPositive())
@@ -491,6 +439,9 @@ static bool ProvePrime(const Integer &p, const Integer &q)
if (((r%q).Squared()-4*(r/q)).IsSquare())
return false;
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
+
assert(primeTableSize >= 50);
for (int i=0; i<50; i++)
{
@@ -507,7 +458,7 @@ Integer MihailescuProvablePrime(RandomNumberGenerator &rng, unsigned int pbits)
Integer minP = Integer::Power2(pbits-1);
Integer maxP = Integer::Power2(pbits) - 1;
- if (maxP <= Integer(lastSmallPrime).Squared())
+ if (maxP <= Integer(s_lastSmallPrime).Squared())
{
// Randomize() will generate a prime provable by trial division
p.Randomize(rng, minP, maxP, Integer::PRIME);
@@ -546,7 +497,9 @@ Integer MaurerProvablePrime(RandomNumberGenerator &rng, unsigned int bits)
const unsigned smallPrimeBound = 29, c_opt=10;
Integer p;
- BuildPrimeTable();
+ unsigned int primeTableSize;
+ const word * primeTable = GetPrimeTable(primeTableSize);
+
if (bits < smallPrimeBound)
{
do
diff --git a/nbtheory.h b/nbtheory.h
index 3ef517dc..cb953f24 100644
--- a/nbtheory.h
+++ b/nbtheory.h
@@ -8,14 +8,8 @@
NAMESPACE_BEGIN(CryptoPP)
-// export a table of small primes
-extern const unsigned int maxPrimeTableSize;
-extern const word lastSmallPrime;
-extern unsigned int primeTableSize;
-extern word primeTable[];
-
-// build up the table to maxPrimeTableSize
-CRYPTOPP_DLL void BuildPrimeTable();
+// obtain pointer to small prime table and get its size
+CRYPTOPP_DLL const word * GetPrimeTable(unsigned int &size);
// ************ primality testing ****************
diff --git a/pubkey.h b/pubkey.h
index 272865fa..fcf3f508 100644
--- a/pubkey.h
+++ b/pubkey.h
@@ -1507,7 +1507,7 @@ public:
//! A template implementing constructors for public key algorithm classes
template <class BASE>
-class PK_FinalTemplate : public BASE
+class CRYPTOPP_NO_VTABLE PK_FinalTemplate : public BASE
{
public:
PK_FinalTemplate() {}
diff --git a/test.cpp b/test.cpp
index e3716527..abf0a775 100644
--- a/test.cpp
+++ b/test.cpp
@@ -742,7 +742,7 @@ bool Validate(int alg, bool thorough, const char *seed)
case 7: result = ValidateARC4(); break;
case 8: result = ValidateRC5(); break;
case 9: result = ValidateBlowfish(); break;
- case 10: result = ValidateDiamond2(); break;
+// case 10: result = ValidateDiamond2(); break;
case 11: result = ValidateThreeWay(); break;
case 12: result = ValidateBBS(); break;
case 13: result = ValidateDH(); break;
diff --git a/validat1.cpp b/validat1.cpp
index 4edaada9..1342de53 100644
--- a/validat1.cpp
+++ b/validat1.cpp
@@ -15,7 +15,6 @@
#include "arc4.h"
#include "rc5.h"
#include "blowfish.h"
-#include "diamond.h"
#include "wake.h"
#include "3way.h"
#include "safer.h"
@@ -78,7 +77,6 @@ bool ValidateAll(bool thorough)
pass=ValidateARC4() && pass;
pass=ValidateRC5() && pass;
pass=ValidateBlowfish() && pass;
- pass=ValidateDiamond2() && pass;
pass=ValidateThreeWay() && pass;
pass=ValidateGOST() && pass;
pass=ValidateSHARK() && pass;
@@ -1123,55 +1121,6 @@ bool ValidateBlowfish()
return pass;
}
-bool ValidateDiamond2()
-{
- cout << "\nDiamond2 validation suite running...\n\n";
-
- FileSource valdata("diamond.dat", true, new HexDecoder);
- HexEncoder output(new FileSink(cout));
- byte key[32], plain[16], cipher[16], out[16], outplain[16];
- byte blocksize, rounds, keysize;
- bool pass=true, fail;
- member_ptr<BlockTransformation> diamond; // VC60 workaround: auto_ptr lacks reset
-
- while (valdata.MaxRetrievable() >= 1)
- {
- valdata.Get(blocksize);
- valdata.Get(rounds);
- valdata.Get(keysize);
- valdata.Get(key, keysize);
- valdata.Get(plain, blocksize);
- valdata.Get(cipher, blocksize);
-
- if (blocksize==16)
- diamond.reset(new Diamond2Encryption(key, keysize, rounds));
- else
- diamond.reset(new Diamond2LiteEncryption(key, keysize, rounds));
-
- diamond->ProcessBlock(plain, out);
- fail=memcmp(out, cipher, blocksize) != 0;
-
- if (blocksize==16)
- diamond.reset(new Diamond2Decryption(key, keysize, rounds));
- else
- diamond.reset(new Diamond2LiteDecryption(key, keysize, rounds));
-
- diamond->ProcessBlock(out, outplain);
- fail=fail || memcmp(outplain, plain, blocksize);
-
- pass = pass && !fail;
-
- cout << (fail ? "FAILED " : "passed ");
- output.Put(key, keysize);
- cout << "\n ";
- output.Put(outplain, blocksize);
- cout << " ";
- output.Put(out, blocksize);
- cout << endl;
- }
- return pass;
-}
-
bool ValidateThreeWay()
{
cout << "\n3-WAY validation suite running...\n\n";
diff --git a/validate.h b/validate.h
index 4bf69b8d..4790f1ac 100644
--- a/validate.h
+++ b/validate.h
@@ -38,7 +38,6 @@ bool ValidateARC4();
bool ValidateRC5();
bool ValidateBlowfish();
-bool ValidateDiamond2();
bool ValidateThreeWay();
bool ValidateGOST();
bool ValidateSHARK();