All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sunlabs.brazil.slim.BasicAudioTools Maven / Gradle / Ivy

The newest version!
/*
 * BasicAudioTools.java
 *
 * Brazil project web application toolkit,
 * export version: 2.3 
 * Copyright (c) 2002 Sun Microsystems, Inc.
 *
 * Sun Public License Notice
 *
 * The contents of this file are subject to the Sun Public License Version 
 * 1.0 (the "License"). You may not use this file except in compliance with 
 * the License. A copy of the License is included as the file "license.terms",
 * and also available at http://www.sun.com/
 * 
 * The Original Code is from:
 *    Brazil project web application toolkit release 2.3.
 * The Initial Developer of the Original Code is: lc138592.
 * Portions created by lc138592 are Copyright (C) Sun Microsystems, Inc.
 * All Rights Reserved.
 * 
 * Contributor(s): lc138592, suhler.
 *
 * Version:  2.1
 * Created by lc138592 on 02/07/18
 * Last modified by suhler on 02/10/01 16:36:01
 *
 * Version Histories:
 *
 * 2.1 02/10/01-16:36:01 (suhler)
 *   version change
 *
 * 1.7 02/08/07-16:37:18 (lc138592)
 *   Added scaling to the ML8 Conversion
 *
 * 1.6 02/08/07-14:49:47 (lc138592)
 *   Added options to add value in the revered byte order
 *
 * 1.5 02/08/06-17:56:06 (lc138592)
 *   Added a / 8 where one should have been, but was not
 *
 * 1.4 02/08/06-11:24:04 (suhler)
 *   remove * imports
 *
 * 1.3 02/08/05-17:01:42 (lc138592)
 *   Added Javadocs
 *
 * 1.2 02/07/31-13:56:20 (lc138592)
 *   Completely revamped for WAV support
 *
 * 1.2 70/01/01-00:00:02 (Codemgr)
 *   SunPro Code Manager data about conflicts, renames, etc...
 *   Name history : 1 0 slim/BasicAudioTools.java
 *
 * 1.1 02/07/18-17:33:48 (lc138592)
 *   date and time created 02/07/18 17:33:48 by lc138592
 *
 */

package sunlabs.brazil.slim;

import java.io.FileOutputStream;

/**
 * This is a collection of Basic Audio file manipulation tools.  Essentially
 * this is a catch all class for putting useful methods needed to deal with
 * the various audio components of this system.  Included so far are basic
 * utilities for tagging the header onto raw audio data, both in wave and
 * sun audio format.  Also there is a method for storing to file and for 
 * converting to 8-bit Mulaw from 16-bit linear PCM.
 *
 * @author Leo Chao
 */
public class BasicAudioTools
{
    private static final int au_file_size = 24;
    private static final int wav_file_size =44;
    public static final String AU_FILE = "au";
    public static final String WAV_FILE = "wav";

    /** Indicates 8-bit Mulaw encoding*/
    public static final String ML8 = "ML8";
    /** Indicates 8kHz 16-bit PCM*/
    public static final String PCM8  = "PCM8";
    /** Indicates 16kHz 16-bit PCM*/
    public static final String PCM16 = "PCM16";

    /**
     * Returns the size of the specified header type, currently only 
     * recognized WAV_FILE and AU_FILE.
     *
     * @param typename One of the predefined static final strings
     * @return Either the header size, or -1 if the typename was not
     *         recognized.
     */
    public static int getHeaderSize(String typename)
    {
	if (typename.equals(AU_FILE)) {
	    return au_file_size;
	}
	else if (typename.equals(WAV_FILE)) {
	    return wav_file_size;
	}
	else {	    
	    return -1;
	}
    }

    /**
     * Place an integer value at the specified offset in a byte array.
     *
     * @param b the byte array
     * @param start the offset to place the int
     * @param value the value to place at the offset
     */
    public static void placeInt(byte[] b, int start, int value)
    {
        b[start]   = (byte)((value & 0xff000000) >> 24);
        b[start+1] = (byte)((value & 0x00ff0000) >> 16);
        b[start+2] = (byte)((value & 0x0000ff00) >> 8);
        b[start+3] =  (byte)(value & 0x000000ff);
    }

    /**
     * Place an integer value at the specified offset in a byte array,
     * but with a inverted byte order as placeInt.
     *
     * @param b the byte array
     * @param start the offset to place the int
     * @param value the value to place at the offset
     */
    public static void backplaceInt(byte[] b, int start, int value)
    {
        b[start+3]   = (byte)((value & 0xff000000) >> 24);
        b[start+2] = (byte)((value & 0x00ff0000) >> 16);
        b[start+1] = (byte)((value & 0x0000ff00) >> 8);
        b[start] =  (byte)(value & 0x000000ff);
    }

    /**
     * Place a short value at the specified offset in a byte array.
     *
     * @param b the byte array
     * @param offset the offset to place the short
     * @param value the value to place at the offset
     */
    public static void placeShort(byte[] b, int offset, short value)
    {
	b[offset] = (byte)((value & 0xff00) >> 8);
	b[offset+1] = (byte)(value & 0x00ff);
    }

    /**
     * Place a short value at the specified offset in a byte array, 
     * but with an inverted byte order as placeShort
     *
     * @param b the byte array
     * @param offset the offset to place the short
     * @param value the value to place at the offset
     */
    public static void backplaceShort(byte[] b, int offset, short value)
    {
	b[offset+1] = (byte)((value & 0xff00) >> 8);
	b[offset] = (byte)(value & 0x00ff);
    }

    /**
     * Places a string into a byte array (converting the chars to bytes)
     * starting at the offset and working forward the length of the string
     *
     * @param b the byte array
     * @param offset the offset to place the short
     * @param str the string to place in the array
     */
    public static void placeString(byte[] b, int offset, String str)
    {
	for(int i=0;i= b.length) return null;

	byteCopy(swapped_data, 0, b, 0, offset);
	for(int i = offset;i<(size+offset);i+=2) {
	    swapped_data[i] = b[i+1];
	    swapped_data[i+1] = b[i];
	}
	    
	return swapped_data;
    }

    /**
     * Convers a linear PCM 16-bit audio data format byte array into an
     * 8-bit mulaw compressed byte array.
     *
     * @param b the data to convert
     * @param size the number of bytes to convert, should be even
     * @return the converted byte stream, should be 1/2 size long
     */
    public static byte[] convertToML8(byte[] b, int size)
    {
	return convertToML8(b, size, 3);
    }

    /**
     * Convers a linear PCM 16-bit audio data format byte array into an
     * 8-bit mulaw compressed byte array.
     *
     * @param b the data to convert
     * @param size the number of bytes to convert, should be even
     * @param vol_scale amount to shift the 16-bit value down.  Note values under 3 might cause clipping as the method will mask each sample with 0x1fff before the conversion to 8-bit mulaw is performed.
     * @return the converted byte stream, should be 1/2 size long
     */
    public static byte[] convertToML8(byte[] b, int size, int vol_scale)
    {
	int i, A, B;
	short value, vb;
	byte[] nb = new byte[size/2];

	if (vol_scale < 0)
	    vol_scale = 0;	

	for (i = 1;i> vol_scale);
	    if (value > 0x0fff)
		value = 0x0fff;
	    else if (value < (-1*(0x0fff)))
		value = -1*0x0fff;

	    
	    nb[(i-1)/2] = (byte)((rawToBasicTable[value+0x1000])&0x000000ff);
	}
	
	size = size /2;	
	return nb;
    }

    private static final int[] rawToBasicTable = {
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
	  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
	  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
	  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
	  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
	  6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
	  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
	  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
	 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
	 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
	 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
	 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
	 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
	 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
	 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
	 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
	 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
	 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
	 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
	 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
	 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
	 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
	 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
	 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
	 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
	 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
	 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
	 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15,
	 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
	 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
	 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
	 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
	 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
	 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
	 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
	 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
	 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
	 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
	 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17,
	 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
	 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
	 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
	 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
	 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
	 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
	 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
	 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
	 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
	 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
	 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20,
	 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
	 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
	 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
	 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
	 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21,
	 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
	 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
	 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
	 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22,
	 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
	 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
	 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
	 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
	 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
	 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
	 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
	 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
	 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
	 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26,
	 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
	 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
	 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
	 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
	 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
	 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
	 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28,
	 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
	 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
	 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29,
	 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
	 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
	 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30,
	 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
	 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
	 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31,
	 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
	 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
	 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32,
	 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
	 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
	 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
	 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
	 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
	 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
	 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
	 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35,
	 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
	 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
	 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
	 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
	 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
	 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
	 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38,
	 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
	 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39,
	 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
	 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40,
	 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
	 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41,
	 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
	 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
	 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
	 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
	 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44,
	 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
	 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45,
	 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
	 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
	 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47,
	 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48,
	 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
	 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
	 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50,
	 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51,
	 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
	 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
	 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
	 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
	 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
	 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
	 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
	 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
	 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60,
	 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61,
	 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62,
	 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64,
	 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65,
	 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67,
	 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68,
	 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70,
	 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72,
	 72, 72, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74,
	 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 77, 77,
	 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79,
	 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 83,
	 83, 83, 83, 83, 84, 84, 84, 84, 84, 85, 85, 85, 85, 86, 86, 86,
	 86, 87, 87, 87, 87, 88, 88, 88, 88, 89, 89, 89, 89, 90, 90, 90,
	 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95,
	 96, 96, 96, 97, 97, 98, 98, 98, 99, 99,100,100,101,101,101,102,
	102,103,103,104,104,105,106,106,107,107,108,109,109,110,110,111,
	112,113,113,114,115,116,117,118,119,120,121,122,123,124,125,127,
	255,253,252,251,250,249,248,247,246,245,244,243,242,241,241,240,
	239,238,238,237,237,236,235,235,234,234,233,232,232,231,231,230,
	230,229,229,229,228,228,227,227,226,226,226,225,225,224,224,224,
	223,223,223,222,222,222,221,221,221,220,220,220,219,219,219,219,
	218,218,218,217,217,217,217,216,216,216,216,215,215,215,215,214,
	214,214,214,213,213,213,213,212,212,212,212,212,211,211,211,211,
	211,210,210,210,210,210,209,209,209,209,209,208,208,208,208,208,
	207,207,207,207,207,207,206,206,206,206,206,206,205,205,205,205,
	205,205,204,204,204,204,204,204,204,203,203,203,203,203,203,203,
	202,202,202,202,202,202,202,201,201,201,201,201,201,201,200,200,
	200,200,200,200,200,200,199,199,199,199,199,199,199,199,198,198,
	198,198,198,198,198,198,197,197,197,197,197,197,197,197,197,196,
	196,196,196,196,196,196,196,196,195,195,195,195,195,195,195,195,
	195,195,194,194,194,194,194,194,194,194,194,194,193,193,193,193,
	193,193,193,193,193,193,192,192,192,192,192,192,192,192,192,192,
	192,191,191,191,191,191,191,191,191,191,191,191,190,190,190,190,
	190,190,190,190,190,190,190,190,189,189,189,189,189,189,189,189,
	189,189,189,189,189,188,188,188,188,188,188,188,188,188,188,188,
	188,188,187,187,187,187,187,187,187,187,187,187,187,187,187,186,
	186,186,186,186,186,186,186,186,186,186,186,186,186,185,185,185,
	185,185,185,185,185,185,185,185,185,185,185,185,184,184,184,184,
	184,184,184,184,184,184,184,184,184,184,184,183,183,183,183,183,
	183,183,183,183,183,183,183,183,183,183,183,182,182,182,182,182,
	182,182,182,182,182,182,182,182,182,182,182,182,181,181,181,181,
	181,181,181,181,181,181,181,181,181,181,181,181,181,181,180,180,
	180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
	179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
	179,179,179,178,178,178,178,178,178,178,178,178,178,178,178,178,
	178,178,178,178,178,178,178,177,177,177,177,177,177,177,177,177,
	177,177,177,177,177,177,177,177,177,177,177,177,176,176,176,176,
	176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
	176,176,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
	175,175,175,175,175,175,175,175,175,174,174,174,174,174,174,174,
	174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
	173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
	173,173,173,173,173,173,173,173,173,172,172,172,172,172,172,172,
	172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
	172,172,172,171,171,171,171,171,171,171,171,171,171,171,171,171,
	171,171,171,171,171,171,171,171,171,171,171,171,171,171,170,170,
	170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
	170,170,170,170,170,170,170,170,170,170,170,169,169,169,169,169,
	169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
	169,169,169,169,169,169,169,169,168,168,168,168,168,168,168,168,
	168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
	168,168,168,168,168,168,168,167,167,167,167,167,167,167,167,167,
	167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
	167,167,167,167,167,167,167,166,166,166,166,166,166,166,166,166,
	166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
	166,166,166,166,166,166,166,166,166,165,165,165,165,165,165,165,
	165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
	165,165,165,165,165,165,165,165,165,165,165,165,164,164,164,164,
	164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
	164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
	163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
	163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
	163,163,163,163,163,163,163,162,162,162,162,162,162,162,162,162,
	162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
	162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,161,
	161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
	161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
	161,161,161,161,161,161,161,161,160,160,160,160,160,160,160,160,
	160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
	160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
	160,160,160,160,159,159,159,159,159,159,159,159,159,159,159,159,
	159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
	159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
	159,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
	158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
	158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
	158,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
	157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
	157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
	157,157,157,156,156,156,156,156,156,156,156,156,156,156,156,156,
	156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
	156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
	156,156,156,156,156,156,155,155,155,155,155,155,155,155,155,155,
	155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
	155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
	155,155,155,155,155,155,155,155,155,155,155,155,155,154,154,154,
	154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
	154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
	154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
	154,154,154,154,154,153,153,153,153,153,153,153,153,153,153,153,
	153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
	153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
	153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
	152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
	152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
	152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
	152,152,152,152,152,152,152,152,152,152,152,152,152,152,151,151,
	151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
	151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
	151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
	151,151,151,151,151,151,151,151,151,151,151,151,151,151,150,150,
	150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
	150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
	150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
	150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
	150,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
	149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
	149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
	149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
	149,149,149,149,149,149,149,149,148,148,148,148,148,148,148,148,
	148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
	148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
	148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
	148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
	148,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
	147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
	147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
	147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
	147,147,147,147,147,147,147,147,147,147,147,147,147,146,146,146,
	146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
	146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
	146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
	146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
	146,146,146,146,146,146,146,146,146,146,146,146,146,145,145,145,
	145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
	145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
	145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
	145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
	145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
	145,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
	144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
	144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
	144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
	144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
	144,144,144,144,144,144,144,144,143,143,143,143,143,143,143,143,
	143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
	143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
	143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
	143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
	143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
	143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,142,
	142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
	142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
	142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
	142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
	142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
	142,142,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
	141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
	141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
	141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
	141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
	141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
	141,141,141,141,141,140,140,140,140,140,140,140,140,140,140,140,
	140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
	140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
	140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
	140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
	140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
	140,140,140,140,140,140,140,140,140,140,140,140,140,139,139,139,
	139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
	139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
	139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
	139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
	139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
	139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
	139,139,139,139,139,139,139,139,139,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
	138,138,138,138,138,138,138,138,138,138,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
	136,136,136,136,136,136,136,136,136,136,136,136,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
	135,135,135,135,135,135,135,135,135,135,135,135,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
	134,134,134,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
	133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
	132,132,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
	131,131,131,131,131,131,131,131,131,131,131,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
	130,130,130,130,130,130,130,130,130,130,130,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
	129,129,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128 
    };    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy