[xiph-commits] r13469 - in trunk/vorbis-java: . org org/xiph
org/xiph/libogg org/xiph/libshout org/xiph/libvorbis
org/xiph/libvorbis/books org/xiph/libvorbis/books/coupled
org/xiph/libvorbis/books/coupled/resbook_44
org/xiph/libvorbis/books/floor org/xiph/libvorbis/modes
org/xiph/libvorbis/vorbis_constants
bcohee at svn.xiph.org
bcohee at svn.xiph.org
Wed Aug 8 16:16:46 PDT 2007
Author: bcohee
Date: 2007-08-08 16:16:42 -0700 (Wed, 08 Aug 2007)
New Revision: 13469
Added:
trunk/vorbis-java/.classpath
trunk/vorbis-java/.project
trunk/vorbis-java/Jheader.ogg
trunk/vorbis-java/Todo.txt
trunk/vorbis-java/VorbisEncoder.java
trunk/vorbis-java/jvorbis_debug.rtf
trunk/vorbis-java/log4j.properties
trunk/vorbis-java/org/
trunk/vorbis-java/org/xiph/
trunk/vorbis-java/org/xiph/libogg/
trunk/vorbis-java/org/xiph/libogg/ogg_packet.java
trunk/vorbis-java/org/xiph/libogg/ogg_page.java
trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java
trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java
trunk/vorbis-java/org/xiph/libshout/
trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java
trunk/vorbis-java/org/xiph/libshout/ShoutClient.java
trunk/vorbis-java/org/xiph/libvorbis/
trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java
trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java
trunk/vorbis-java/org/xiph/libvorbis/att3.java
trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java
trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java
trunk/vorbis-java/org/xiph/libvorbis/books/
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_2.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_3.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_4.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_5.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_6.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_7.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_8.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_9.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_n1.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44sm_0.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44sm_1.java
trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44sm_n1.java
trunk/vorbis-java/org/xiph/libvorbis/books/floor/
trunk/vorbis-java/org/xiph/libvorbis/books/floor/floor_books.java
trunk/vorbis-java/org/xiph/libvorbis/codebook.java
trunk/vorbis-java/org/xiph/libvorbis/codec_setup_info.java
trunk/vorbis-java/org/xiph/libvorbis/compandblock.java
trunk/vorbis-java/org/xiph/libvorbis/drft_lookup.java
trunk/vorbis-java/org/xiph/libvorbis/encode_aux_nearestmatch.java
trunk/vorbis-java/org/xiph/libvorbis/encode_aux_pigeonhole.java
trunk/vorbis-java/org/xiph/libvorbis/encode_aux_threshmatch.java
trunk/vorbis-java/org/xiph/libvorbis/envelope_band.java
trunk/vorbis-java/org/xiph/libvorbis/envelope_filter_state.java
trunk/vorbis-java/org/xiph/libvorbis/envelope_lookup.java
trunk/vorbis-java/org/xiph/libvorbis/highlevel_byblocktype.java
trunk/vorbis-java/org/xiph/libvorbis/highlevel_encode_setup.java
trunk/vorbis-java/org/xiph/libvorbis/lsfit_acc.java
trunk/vorbis-java/org/xiph/libvorbis/mdct_lookup.java
trunk/vorbis-java/org/xiph/libvorbis/modes/
trunk/vorbis-java/org/xiph/libvorbis/modes/setup_44.java
trunk/vorbis-java/org/xiph/libvorbis/noise3.java
trunk/vorbis-java/org/xiph/libvorbis/noiseguard.java
trunk/vorbis-java/org/xiph/libvorbis/oggpack_buffer.java
trunk/vorbis-java/org/xiph/libvorbis/ovectl_ratemanage2_arg.java
trunk/vorbis-java/org/xiph/libvorbis/private_state.java
trunk/vorbis-java/org/xiph/libvorbis/static_bookblock.java
trunk/vorbis-java/org/xiph/libvorbis/static_codebook.java
trunk/vorbis-java/org/xiph/libvorbis/ve_setup_data_template.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_block.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_block_internal.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_comment.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_constants/
trunk/vorbis-java/org/xiph/libvorbis/vorbis_constants/integer_constants.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_dsp_state.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_floor1.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_mapping0.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_mode.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_psy.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_psy_global.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_residue0.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_floor1.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_psy.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_psy_arrays.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_psy_global.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_residue0.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_mapping_template.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_residue_template.java
trunk/vorbis-java/org/xiph/libvorbis/vorbis_window.java
trunk/vorbis-java/org/xiph/libvorbis/vorbisenc.java
trunk/vorbis-java/org/xiph/libvorbis/vp_adjblock.java
trunk/vorbis-java/output.log.1
trunk/vorbis-java/test.wav
trunk/vorbis-java/test_original.wav
Log:
Initial import.
Added: trunk/vorbis-java/.classpath
===================================================================
--- trunk/vorbis-java/.classpath (rev 0)
+++ trunk/vorbis-java/.classpath 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path=""/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: trunk/vorbis-java/.project
===================================================================
--- trunk/vorbis-java/.project (rev 0)
+++ trunk/vorbis-java/.project 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>JVorbis</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: trunk/vorbis-java/Jheader.ogg
===================================================================
(Binary files differ)
Property changes on: trunk/vorbis-java/Jheader.ogg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/vorbis-java/Todo.txt
===================================================================
--- trunk/vorbis-java/Todo.txt (rev 0)
+++ trunk/vorbis-java/Todo.txt 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,104 @@
+
+JVorbis Todo Checklist
+----------------------
+
+package management
+----------------------
+cutback on mass imports - have every instance complete class paths
+log4j - figure out best way make this deployable within the .jar library
+
+
+libvorbis
+----------------------
+// DONE - Vorbis Comment support added into header
+
+vorbis_encode_init_vbr( vi, 2, 44100, .4f )) - quality should be able to be increased/decresed but not tested yet
+finish support for managed bitrate options
+
+Optimize
+
+manual memory cleanup - _vorbis_pull_ripcord, saves values from a mock vorbis_block_alloc to track localstorage offsets and keep memory footprint down
+
+Check multiple loops to combine throughout the main loop
+
+rewrite to let the java garbage collector manage memory more in main loop - ByteStreams or ArrayLists etc
+
+ System.arraycopy everywhere instead of memcpy, memmove
+ Arrays.fill instead of memsets and hardloops
+
+
+add low quality support from aoTuV - http://www.geocities.jp/aoyoume/aotuv/
+
+OOP classes
+
+merge same classes into combined packages : http://jarticles.com/package/package_eng.html
+
+Get rid of floor1_func, res0_func, map0_func
+ _floor_P
+ _residue_P
+ _map_P
+
+Abstract as j-ogg, jcraft
+
+ (may only be needed for decode or encode other than 2 channels 44100 rate .4f quality)
+ _floor_P (currently only supports floor1)
+ _residue_P (currently only supports res0)
+ _mapping_P (currently only supports mapping0)
+
+ add floor1 (info, look and functions)
+ vorbis_info_floor1.java, vorbis_look_floor1.java, oggpack_buffer.java
+
+ add residue0 (info, look) and create residue type 0,1,2 [functions]
+ vorbis_info_residue0.java, vorbis_look_residue0.java, oggpack_buffer.java
+
+
+ add mapping0 (info, look and functions) - *** ilog is actually ilog2 function - see mapping0.c
+ vorbis_info_mapping0.java, < no look function >, oggpack_buffer.java
+
+Java signed (>>) to unsigned (>>>) bit shift changes
+These all need inteligent checks
+vorbisenc.java 4
+vorbis_dsp_state 2
+mdct_lookup 17
+drft_lookup 4
+codebook 4
+bitrate_manager_state 1
+
+
+libshout
+----------------------
+total system state managment
+error exception flow
+reconnecting, buffering
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+References
+----------
+
+
+http://xiph.org/vorbis/doc/Vorbis_I_spec.html
+
+http://xiph.org/vorbis/doc/
+
Property changes on: trunk/vorbis-java/Todo.txt
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/VorbisEncoder.java
===================================================================
--- trunk/vorbis-java/VorbisEncoder.java (rev 0)
+++ trunk/vorbis-java/VorbisEncoder.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,198 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+import java.io.*;
+import org.xiph.libvorbis.*;
+import org.xiph.libogg.*;
+
+public class VorbisEncoder {
+
+ static vorbisenc encoder;
+
+ static ogg_stream_state os; // take physical pages, weld into a logical stream of packets
+
+ static ogg_page og; // one Ogg bitstream page. Vorbis packets are inside
+ static ogg_packet op; // one raw packet of data for decode
+
+ static vorbis_info vi; // struct that stores all the static vorbis bitstream settings
+
+ static vorbis_comment vc; // struct that stores all the user comments
+
+ static vorbis_dsp_state vd; // central working state for the packet->PCM decoder
+ static vorbis_block vb; // local working space for packet->PCM decode
+
+ static int READ = 1024;
+ static byte[] readbuffer = new byte[READ*4+44];
+
+ static int page_count = 0;
+ static int block_count = 0;
+
+ /**
+ * VorbisEncoder.java
+ *
+ * Usage:
+ * java -cp VorbisEncoder <Input File[.wav]> <Output File[.ogg]>
+ *
+ */
+ public static void main( String[] args ) {
+
+ // Output Java System Properties
+ /*
+ java.util.Properties prop = System.getProperties();
+ java.util.Enumeration propNames = prop.propertyNames();
+
+ while ( propNames.hasMoreElements() ) {
+ String key = (String) propNames.nextElement();
+ }
+ */
+
+ if ( args.length < 2 ) {
+ System.out.println( "Usage:");
+ System.out.println( "java -cp VorbisEncoder <Input File[.wav]> <Output File[.ogg]>");
+ System.exit(0);
+ }
+
+ boolean eos = false;
+
+ vi = new vorbis_info();
+
+ encoder = new vorbisenc();
+
+ if ( !encoder.vorbis_encode_init_vbr( vi, 2, 44100, .3f ) ) {
+ System.out.println( "Failed to Initialize vorbisenc" );
+ return;
+ }
+
+ vc = new vorbis_comment();
+ vc.vorbis_comment_add_tag( "ENCODER", "Java Vorbis Encoder" );
+
+ vd = new vorbis_dsp_state();
+
+ if ( !vd.vorbis_analysis_init( vi ) ) {
+ System.out.println( "Failed to Initialize vorbis_dsp_state" );
+ return;
+ }
+
+ vb = new vorbis_block( vd );
+
+ java.util.Random generator = new java.util.Random(); // need to randomize seed
+ os = new ogg_stream_state( generator.nextInt(256) );
+
+ System.out.print( "Writing header." );
+ ogg_packet header = new ogg_packet();
+ ogg_packet header_comm = new ogg_packet();
+ ogg_packet header_code = new ogg_packet();
+
+ vd.vorbis_analysis_headerout( vc, header, header_comm, header_code );
+
+ os.ogg_stream_packetin( header); // automatically placed in its own page
+ os.ogg_stream_packetin( header_comm );
+ os.ogg_stream_packetin( header_code );
+
+ og = new ogg_page();
+ op = new ogg_packet();
+
+ try {
+
+ FileOutputStream fos = new FileOutputStream( args[1] );
+
+ while( !eos ) {
+
+ if ( !os.ogg_stream_flush( og ) )
+ break;
+
+ fos.write( og.header, 0, og.header_len );
+ fos.write( og.body, 0, og.body_len );
+ System.out.print( "." );
+ }
+ System.out.print( "Done.\n" );
+
+ FileInputStream fin = new FileInputStream( args[0] );
+
+ System.out.print( "Encoding." );
+ while ( !eos ) {
+
+ int i;
+ int bytes = fin.read( readbuffer, 0, READ*4 ); // stereo hardwired here
+
+ int break_count = 0;
+
+ if ( bytes==0 ) {
+
+ // end of file. this can be done implicitly in the mainline,
+ // but it's easier to see here in non-clever fashion.
+ // Tell the library we're at end of stream so that it can handle
+ // the last frame and mark end of stream in the output properly
+
+ vd.vorbis_analysis_wrote( 0 );
+
+ } else {
+
+ // data to encode
+
+ // expose the buffer to submit data
+ float[][] buffer = vd.vorbis_analysis_buffer( READ );
+
+ // uninterleave samples
+ for ( i=0; i < bytes/4; i++ ) {
+ buffer[0][vd.pcm_current + i] = ( (readbuffer[i*4+1]<<8) | (0x00ff&(int)readbuffer[i*4]) ) / 32768.f;
+ buffer[1][vd.pcm_current + i] = ( (readbuffer[i*4+3]<<8) | (0x00ff&(int)readbuffer[i*4+2]) ) / 32768.f;
+ }
+
+ // tell the library how much we actually submitted
+ vd.vorbis_analysis_wrote( i );
+ }
+
+ // vorbis does some data preanalysis, then divvies up blocks for more involved
+ // (potentially parallel) processing. Get a single block for encoding now
+
+ while ( vb.vorbis_analysis_blockout( vd ) ) {
+
+ // analysis, assume we want to use bitrate management
+
+ vb.vorbis_analysis( null );
+ vb.vorbis_bitrate_addblock();
+
+ while ( vd.vorbis_bitrate_flushpacket( op ) ) {
+
+ // weld the packet into the bitstream
+ os.ogg_stream_packetin( op );
+
+ // write out pages (if any)
+ while ( !eos ) {
+
+ if ( !os.ogg_stream_pageout( og ) ) {
+ break_count++;
+ break;
+ }
+
+ fos.write( og.header, 0, og.header_len );
+ fos.write( og.body, 0, og.body_len );
+
+ // this could be set above, but for illustrative purposes, I do
+ // it here (to show that vorbis does know where the stream ends)
+ if ( og.ogg_page_eos() > 0 )
+ eos = true;
+ }
+ }
+ }
+ System.out.print( "." );
+ }
+
+ fin.close();
+ fos.close();
+
+ System.out.print( "Done.\n" );
+
+ } catch (Exception e) { System.out.println( "\n" + e ); e.printStackTrace(System.out); }
+ }
+}
Property changes on: trunk/vorbis-java/VorbisEncoder.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/jvorbis_debug.rtf
===================================================================
--- trunk/vorbis-java/jvorbis_debug.rtf (rev 0)
+++ trunk/vorbis-java/jvorbis_debug.rtf 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,79 @@
+{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf420
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 ArialMT;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh8400\viewkind0
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
+
+\f0\fs24 \cf0 vorbis_block._01forward\
+vorbis_block.res2_forward - end 9 & 3 (2x) run (1st is 19 & 0)\
+vorbis_block.mapping0_forward\
+vorbis_block.vorbis_analysis\
+\
+\
+opb_local\
+endbyte = 45\
+endbit = 4\
+\
+ret = encode\
+\
+java\
+endbyte = 46\
+endbit = 7\
+\
+c\
+endbyte = 47\
+endbut = 2\
+\
+\
+\
+\
+error - 2nd step of _encodepart (when endbyte = 45 & endbit = 4 !!!! float * vec is off)\
+entry = local_book_besterror\
+\
+work*** is off in res2_forward\
+\
+.decimals are off just enough to throw the below and above -.5 flags for local_book_besterror\
+\
+\
+\pard\pardeftab720\ql\qnatural
+
+\f1\fs25\fsmilli12800 \cf0 pcm[0][223]\
+236\
+205 - way fuckin off\
+200\
+190\
+\
+\
+int _vp_couple ifloor[1][62] = 131 for C\'ca\'ca\'ca\'ca\'ca\'ca 132 for java\
+\
+ilogmaskch[i] = ilogmask\
+\
+when i == 1\
+\
+\
+floor_posts[1][7][8] = 511 for C\'ca\'ca\'ca\'ca\'ca\'ca 512 for java \
+mapping0_forward()- > floor1_fit( b.flr[info.floorsubmap[submap]], logmdct, logfft );\
+\
+\
+00037\
+\
+flr[90] through flr[105] are minor off, sync back exact at 105\
+\
+mdct[96] = -84.474411\
++ 18\
+>= flr[96] = - 66.474052\
+\
+530.76220590436471582\
+\
+\
+float flr[] is off on accum fit - very min amount\
+\
+logmask = logfft in mapping0_forward\
+\
+logfft is just vorbis_block.pcm[i]\
+\
+^^^^^\
+when page_count == 5\
+vorbis_analysis() to next\
+vorbis_analysis() [step into]\
+mapping0_forward()}
\ No newline at end of file
Added: trunk/vorbis-java/log4j.properties
===================================================================
--- trunk/vorbis-java/log4j.properties (rev 0)
+++ trunk/vorbis-java/log4j.properties 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,19 @@
+log4j.rootLogger=ALL, stdout, R
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
+
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.File=output.log
+
+log4j.appender.R.MaxFileSize=100KB
+# Keep one backup file
+log4j.appender.R.MaxBackupIndex=1
+
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%n[%d{DATE}] - %5p [%t] (%F:%L) - %m%n
+
+log4j.logger.Test=INFO
\ No newline at end of file
Added: trunk/vorbis-java/org/xiph/libogg/ogg_packet.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_packet.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_packet.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,32 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_packet {
+
+ public byte[] packet; // unsigned char *packet;
+ public int bytes; // long
+ public int b_o_s; // long
+ public int e_o_s; // long
+
+ public int granulepos; // ogg_int64_t
+
+ public int packetno; // ogg_int64_t
+
+ // sequence number for decode; the framing knows where there's a hole in the data, but we need
+ // coupling so that the codec (which is in a seperate abstraction layer) also knows about the gap
+
+
+ public ogg_packet() {}
+
+}
\ No newline at end of file
Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_packet.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libogg/ogg_page.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_page.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_page.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,80 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_page {
+
+ public byte[] header; // unsigned char
+ public int header_len; // long
+ public byte[] body; // unsigned char
+ public int body_len; // long
+
+ // static ogg_uint32_t crc_lookup[256]={
+ private static int[] crc_lookup = new int[256];
+
+ static {
+ for ( int i=0; i < crc_lookup.length; i++ ) {
+ crc_lookup[i] = crc_entry(i);
+ }
+ }
+
+ private static int crc_entry( int index ) {
+
+ int r = index << 24;
+ for ( int i=0; i < 8; i++ ) {
+
+ if ( (r & 0x80000000) != 0 ) {
+ r = (r << 1)^0x04c11db7;
+ /* The same as the ethernet generator
+ * polynomial, although we use an
+ * unreflected alg and an init/final
+ * of 0, not 0xffffffff */
+ } else {
+ r <<= 1;
+ }
+ }
+ return (r & 0xffffffff);
+ }
+
+ public ogg_page() {}
+
+ public int ogg_page_eos() {
+
+ return((int)(header[5]&0x04));
+ }
+
+ public void ogg_page_checksum_set() {
+
+ // ogg_uint32_t crc_reg=0;
+ int crc_reg = 0;
+ int i;
+
+ // safety; needed for API behavior, but not framing code
+ header[22] = 0;
+ header[23] = 0;
+ header[24] = 0;
+ header[25] = 0;
+
+ for ( i=0; i < header_len; i++ ) {
+ crc_reg = (crc_reg<<8)^crc_lookup[((crc_reg>>>24)&0xff)^(header[i]&0xff)];
+ }
+ for ( i=0; i < body_len; i++ ) {
+ crc_reg = (crc_reg<<8)^crc_lookup[((crc_reg>>>24)&0xff)^(body[i]&0xff)];
+ }
+
+ header[22] = (byte)crc_reg /*&0xff*/;
+ header[23] = (byte)(crc_reg>>>8) /*&0xff*/;
+ header[24] = (byte)(crc_reg>>>16) /*&0xff*/;
+ header[25] = (byte)(crc_reg>>>24) /*&0xff*/;
+ }
+}
\ No newline at end of file
Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_page.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,323 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_stream_state {
+
+ byte[] body_data; // unsigned char // bytes from packet bodies
+ int body_storage; // long //storage elements allocated
+ int body_fill; // long //elements stored; fill mark
+ int body_returned; // long //elements of fill returned
+
+ int[] lacing_vals; // The values that will go to the segment table
+ long[] granule_vals; // ogg_int64_t //granulepos values for headers. Not compact this way, but it is simple coupled to the lacing fifo
+ int lacing_storage; // long
+ int lacing_fill; // long
+ int lacing_packet; // long
+ int lacing_returned; // long
+
+ byte[] header; // unsigned char header[282]; //working space for header encode
+ int header_fill;
+
+ int e_o_s; //set when we have buffered the last packet in the logical bitstream
+ int b_o_s; //set after we've written the initial page of a logical bitstream
+ int serialno; // long
+ int pageno; // long
+ long packetno; // ogg_int64_t // sequence number for decode; the framing knows where there's a hole in the data, but we need coupling so
+ // that the codec (which is in a seperate abstraction layer) also knows about the gap
+
+ long granulepos; // ogg_int64_t
+
+
+ public ogg_stream_state () {
+
+ header = new byte[ 282 ];
+ }
+
+ public ogg_stream_state( int _serialno ) {
+
+ header = new byte[ 282 ];
+
+ body_storage = 16*1024;
+
+ // body_data = _ogg_malloc(os->body_storage*sizeof(*os->body_data));
+ body_data = new byte[ body_storage ];
+
+ lacing_storage = 1024;
+ lacing_vals = new int[ lacing_storage ];
+ granule_vals = new long[ lacing_storage ];
+
+ serialno = _serialno;
+ }
+
+ public int getSerialNo() {
+ return serialno;
+ }
+
+ // Helpers for ogg_stream_encode; this keeps the structure and what's happening fairly clear
+
+ public void _os_body_expand( int needed ) {
+
+ if ( body_storage <= body_fill + needed ) {
+
+ body_storage += (needed+1024);
+
+ // body_data = _ogg_realloc(os->body_data,os->body_storage*sizeof(*os->body_data));
+ byte[] temp = new byte[ body_storage ];
+ System.arraycopy( body_data, 0, temp, 0, body_data.length );
+ body_data = temp;
+ }
+ }
+
+ public void _os_lacing_expand( int needed ) {
+
+ if ( lacing_storage <= lacing_fill + needed ) {
+
+ lacing_storage += (needed+32);
+
+ // lacing_vals = _ogg_realloc(os->lacing_vals,os->lacing_storage*sizeof(*os->lacing_vals));
+ int[] temp = new int[ lacing_storage ];
+ System.arraycopy( lacing_vals, 0, temp, 0, lacing_vals.length );
+ lacing_vals = temp;
+
+ // granule_vals = _ogg_realloc(os->granule_vals,os->lacing_storage*sizeof(*os->granule_vals));
+ long[] temp2 = new long[ lacing_storage ];
+ System.arraycopy( granule_vals, 0, temp, 0, granule_vals.length );
+ granule_vals = temp2;
+ }
+ }
+
+ public boolean ogg_stream_packetin( ogg_packet op ) {
+
+// OOP varaible lacing_vals renamed lacing_vals_local
+ int lacing_vals_local = op.bytes/255+1;
+ int i;
+
+ if ( body_returned > 0 ) {
+
+ /* advance packet data according to the body_returned pointer. We
+ * had to keep it around to return a pointer into the buffer last call */
+
+ body_fill -= body_returned;
+ if ( body_fill > 0 ) {
+ // memmove( body_data, body_data + body_returned, body_fill );
+ System.arraycopy( body_data, body_returned, body_data, 0, body_fill );
+ }
+ body_returned = 0;
+ }
+
+ // make sure we have the buffer storage
+ _os_body_expand( op.bytes );
+ _os_lacing_expand( lacing_vals_local );
+
+ /* Copy in the submitted packet. Yes, the copy is a waste; this is
+ * the liability of overly clean abstraction for the time being. It
+ * will actually be fairly easy to eliminate the extra copy in the future */
+
+ // memcpy( body_data + body_fill, op.packet, op.bytes );
+ System.arraycopy( op.packet, 0, body_data, body_fill, op.bytes );
+ body_fill += op.bytes;
+
+ // Store lacing vals for this packet
+ for ( i=0; i < lacing_vals_local-1; i++ ) {
+ lacing_vals[ lacing_fill+i ] = 255;
+ granule_vals[ lacing_fill+i ] = granulepos;
+ }
+
+ lacing_vals[ lacing_fill+i ] = (op.bytes)%255;
+ granulepos = granule_vals[ lacing_fill+i] = op.granulepos;
+
+ // flag the first segment as the beginning of the packet
+ lacing_vals[ lacing_fill ] |= 0x100;
+ lacing_fill += lacing_vals_local;
+
+ // for the sake of completeness
+ packetno++;
+
+ if ( op.e_o_s > 0 )
+ e_o_s = 1;
+
+ return true;
+ }
+
+ /* This will flush remaining packets into a page (returning nonzero),
+ * even if there is not enough data to trigger a flush normally
+ * (undersized page). If there are no packets or partial packets to
+ * flush, ogg_stream_flush returns 0. Note that ogg_stream_flush will
+ * try to flush a normal sized page like ogg_stream_pageout; a call to
+ * ogg_stream_flush does not guarantee that all packets have flushed.
+ * Only a return value of 0 from ogg_stream_flush indicates all packet
+ * data is flushed into pages.
+ *
+ * since ogg_stream_flush will flush the last page in a stream even if
+ * it's undersized, you almost certainly want to use ogg_stream_pageout
+ * (and *not* ogg_stream_flush) unless you specifically need to flush
+ * an page regardless of size in the middle of a stream. */
+
+ public boolean ogg_stream_flush( ogg_page og ) {
+
+ int maxvals = (lacing_fill>255?255:lacing_fill);
+ if ( maxvals == 0 )
+ return false;
+
+ int i;
+ int vals=0;
+ int bytes=0;
+ int acc=0;
+ // ogg_int64_t granule_pos=os->granule_vals[0];
+ long granule_pos = granule_vals[0];
+
+
+ // construct a page
+ // decide how many segments to include
+
+ // If this is the initial header case, the first page must only include the initial header packet
+ if ( b_o_s == 0 ) { // 'initial header page' case
+ granule_pos=0;
+ for ( vals=0; vals < maxvals; vals++ ) {
+ if ( (lacing_vals[vals]&0x0ff) < 255 ) {
+ vals++;
+ break;
+ }
+ }
+ } else {
+ for ( vals=0; vals < maxvals; vals++ ) {
+ if ( acc > 4096 )
+ break;
+ acc += lacing_vals[vals]&0x0ff;
+ granule_pos = granule_vals[vals];
+ }
+ }
+
+ // construct the header in temp storage
+ // memcpy(os->header,"OggS",4);
+ // header[0] = 'O';
+ // header[1] = 'g';
+ // header[2] = 'g';
+ // header[3] = 'S';
+ System.arraycopy( "OggS".getBytes(), 0, header, 0, 4 );
+
+ // stream structure version
+ header[4] = 0x00;
+
+ // continued packet flag?
+ header[5] = 0x00;
+ if ( (lacing_vals[0]&0x100) == 0 )
+ header[5] |= 0x01;
+ // first page flag?
+ if ( b_o_s == 0 )
+ header[5] |= 0x02;
+ // last page flag?
+ if ( (e_o_s > 0) && (lacing_fill == vals) )
+ header[5] |= 0x04;
+ b_o_s = 1;
+
+ // 64 bits of PCM position
+ for ( i=6; i < 14; i++ ) {
+ header[i] = (byte)(granule_pos);
+ granule_pos >>>= 8;
+ }
+
+ // 32 bits of stream serial number
+// local OOP varname serialno to serialno_local
+ int serialno_local = serialno;
+ for ( i=14; i <18; i++ ) {
+ header[i] = (byte)(serialno_local);
+ serialno_local >>>= 8;
+ }
+
+ // 32 bits of page counter (we have both counter and page header because this val can roll over)
+ if ( pageno == -1)
+ pageno = 0;
+
+ /* because someone called stream_reset; this would be a strange thing to do in an
+ * encode stream, but it has plausible uses */
+
+// local OOP varname serialno to serialno_local
+ int pageno_local = pageno++;
+ for ( i=18; i < 22; i++ ) {
+ header[i] = (byte)(pageno_local);
+ pageno_local >>>= 8;
+ }
+
+ // zero for computation; filled in later
+ header[22] = 0;
+ header[23] = 0;
+ header[24] = 0;
+ header[25] = 0;
+
+ // segment table
+ header[26] = (byte)(vals);
+ for ( i=0; i < vals; i++ ) {
+ header[i+27] = (byte)(lacing_vals[i]);
+ bytes += (header[i+27] & 0xff);
+ }
+
+
+// this has been hacked together
+// do not know if pointers (offsets) are ok
+// or if actual data needs to be copied to ogg_page
+
+ // set pointers in the ogg_page struct
+ og.header = header;
+ og.header_len = header_fill = vals+27;
+ // og.body = body_data + body_returned;
+ og.body = new byte[ body_data.length - body_returned ];
+ System.arraycopy( body_data, body_returned, og.body, 0, body_data.length - body_returned );
+ og.body_len = bytes;
+
+ // advance the lacing data and set the body_returned pointer
+ lacing_fill -= vals;
+
+ // memmove(os->lacing_vals, os->lacing_vals+vals, os->lacing_fill*sizeof(*os->lacing_vals));
+ // int[] temp = new int[ lacing_fill ];
+ // System.arraycopy( lacing_vals, vals, temp, 0, lacing_fill );
+ // lacing_vals = temp;
+ // System.arraycopy( lacing_vals, vals, lacing_vals, 0, lacing_fill*4 );
+ System.arraycopy( lacing_vals, vals, lacing_vals, 0, lacing_fill );
+
+
+ // memmove(os->granule_vals, os->granule_vals+vals, os->lacing_fill*sizeof(*os->granule_vals));
+ // long[] temp2 = new long[ lacing_fill ];
+ // System.arraycopy( granule_vals, vals, temp2, 0, lacing_fill );
+ // granule_vals= temp2;
+ // System.arraycopy( granule_vals, vals, granule_vals, 0, lacing_fill*8 );
+ System.arraycopy( granule_vals, vals, granule_vals, 0, lacing_fill );
+
+ body_returned += bytes;
+
+ // calculate the checksum
+ og.ogg_page_checksum_set();
+
+ return true;
+ }
+
+ /* This constructs pages from buffered packet segments. The pointers
+ * returned are to static buffers; do not free. The returned buffers are
+ * good only until the next call (using the same ogg_stream_state) */
+
+ public boolean ogg_stream_pageout( ogg_page og ) {
+
+ if ( (e_o_s > 0 && lacing_fill > 0 ) || // 'were done, now flush' case
+ body_fill-body_returned > 4096 || // 'page nominal size' case
+ lacing_fill >= 255 || // 'segment table full' case
+ (lacing_fill > 0 && b_o_s <= 0) ) { // 'initial header page' case
+
+ return ogg_stream_flush(og);
+ }
+
+ // not enough data to construct a page and not end of stream
+ return false;
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,27 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_sync_state {
+
+ byte[] data; // unsigned char
+ int storage;
+ int fill;
+ int returned;
+
+ int unsynced;
+ int headerbytes;
+ int bodybytes;
+
+ public ogg_sync_state() {}
+}
\ No newline at end of file
Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java
===================================================================
--- trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,68 @@
+/********************************************************************
+ * *
+ * Utility class that encodes and decodes byte arrays in Base64 *
+ * representation. *
+ * *
+ * Should be thread safe. *
+ * Credit: markefarr *
+ * http://forum.java.sun.com/thread.jspa?threadID=477461 *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libshout;
+
+public class Base64EncoderDecoder extends java.util.prefs.AbstractPreferences {
+ private java.util.Hashtable encodedStore = new java.util.Hashtable();
+
+ public Base64EncoderDecoder(java.util.prefs.AbstractPreferences prefs, java.lang.String string) {
+ super(prefs, string);
+ }
+
+ public java.lang.String encodeBase64(java.lang.String raw)
+ throws java.io.UnsupportedEncodingException{
+ byte[] rawUTF8 = raw.getBytes("UTF8");
+ this.putByteArray(raw, rawUTF8);
+ return (java.lang.String)this.encodedStore.get(raw);
+ }
+
+ public java.lang.String encodeBase64(java.lang.String key, java.lang.String raw)
+ throws java.io.UnsupportedEncodingException{
+ byte[] rawUTF8 = raw.getBytes("UTF8");
+ this.putByteArray(key, rawUTF8);
+ return (java.lang.String)this.encodedStore.get(key);
+ }
+
+ @SuppressWarnings("unchecked")
+ public java.lang.String decodeBase64(java.lang.String key, java.lang.String base64String)
+ throws java.io.UnsupportedEncodingException, java.io.IOException{
+ byte[] def = {(byte)'D',(byte)'E',(byte)'F'};//placeholder
+ this.encodedStore.put(key,base64String);
+ byte[] byteResults = this.getByteArray(key, def);
+ return new java.lang.String(byteResults, "UTF8");
+ }
+
+ public String get(String key, String def) {
+ return (java.lang.String)this.encodedStore.get(key);
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public void put(String key, String value){
+ this.encodedStore.put(key, value);
+ }
+
+
+// dummy implementation as AbstractPreferences is extended to access methods above
+ protected java.util.prefs.AbstractPreferences childSpi(String name) {return null;}
+ protected String[] childrenNamesSpi() throws java.util.prefs.BackingStoreException {return null;}
+ protected void flushSpi() throws java.util.prefs.BackingStoreException {}
+ protected String getSpi(String key) {return null;}
+ protected String[] keysSpi() throws java.util.prefs.BackingStoreException {return null;}
+ protected void putSpi(String key, String value) {}
+ protected void removeNodeSpi() throws java.util.prefs.BackingStoreException {}
+ protected void removeSpi(String key) {}
+ protected void syncSpi() throws java.util.prefs.BackingStoreException {}
+}
Added: trunk/vorbis-java/org/xiph/libshout/ShoutClient.java
===================================================================
--- trunk/vorbis-java/org/xiph/libshout/ShoutClient.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libshout/ShoutClient.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,249 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libshout;
+
+import java.io.*;
+import java.net.*;
+
+public class ShoutClient {
+
+ private Socket socket = null;
+ private OutputStream socketOutputStream = null;
+
+ private boolean connected = false;
+
+ private String mount = null;
+ private String host = null;
+ private int port = 0;
+ private String username = null;
+ private String password = null;
+
+ private String url = null;
+ private String genre = null;
+ private String title = null;
+ private String desc = null;
+
+ private char[] base64table = new char[] {
+ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
+ 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
+ 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
+ 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',
+ };
+
+ public ShoutClient() {
+
+ connected = false;
+ }
+
+ public ShoutClient( String host, int port, String mount, String user, String password ) {
+
+ this.host = host;
+ this.port = port;
+ this.mount = mount;
+ this.username = user;
+ this.password = password;
+
+ connected = false;
+ }
+
+ public boolean connect( String host, int port, String mount, String user, String password ) {
+
+ this.host = host;
+ this.port = port;
+ this.mount = mount;
+ this.username = user;
+ this.password = password;
+
+ return connect();
+ }
+
+ public boolean connect() {
+
+ if ( !isConnected() ) {
+ try {
+ socket = new Socket( host, port );
+ // socket.connect( new InetSocketAddress( host, port ), 1000 ); // no timeout for now
+
+ socketOutputStream = socket.getOutputStream();
+ socket.setTcpNoDelay( true );
+ writeHeader();
+ }
+ catch ( UnknownHostException e ) {
+ connected = false;
+ System.out.println( "Unknown host: " + host );
+ }
+ catch ( IOException e ) {
+ connected = false;
+ System.out.println( "Socket Connection Error: http://" + host + ":" + port );
+ System.out.println( e + "\n" );
+ }
+ }
+
+ return connected;
+ }
+
+ public boolean isConnected() {
+ return connected;
+ }
+
+ public String getHost() {
+ return this.host;
+ }
+
+ public void setHost( String host ) {
+ this.host = host;
+ }
+
+ public int getPort() {
+ return this.port;
+ }
+
+ public void setPort( int port ) {
+ this.port = port;
+ }
+
+ public String getMount() {
+ return this.mount;
+ }
+
+ public void setMount( String mount ) {
+ this.mount = mount;
+ }
+
+ public String getUser() {
+ return this.username;
+ }
+
+ public void setUser( String user ) {
+ this.username = user;
+ }
+
+ public String getPassword() {
+ return this.password;
+ }
+
+ public void setPassword( String password ) {
+ this.password = password;
+ }
+
+ public String getURL() {
+ return this.url;
+ }
+
+ public void setURL( String url ) {
+ this.url = url;
+ }
+
+ public String getGenre() {
+ return this.genre;
+ }
+
+ public void setGenre( String genre ) {
+ this.genre = genre;
+ }
+
+ public String getTitle() {
+ return this.title;
+ }
+
+ public void setTitle( String title ) {
+ this.title = title;
+ }
+
+ public String getDescription() {
+ return this.desc;
+ }
+
+ public void setDescription( String desc ) {
+ this.desc = desc;
+ }
+
+ public void writeHeader() throws IOException {
+
+ socketOutputStream.write( new String("SOURCE " + mount + " HTTP/1.0" + "\r\n").getBytes() );
+
+ Base64EncoderDecoder base64Encode = new Base64EncoderDecoder( null, "" );
+ String rawAuth = username + ":" + password;
+ String encodedAuth = base64Encode.encodeBase64( base64table.toString(), rawAuth );
+ socketOutputStream.write( new String("Authorization: Basic " + encodedAuth + "\r\n").getBytes() );
+
+ socketOutputStream.write( new String("User-Agent: libshout/" + "\r\n").getBytes() );
+ socketOutputStream.write( new String("Content-Type: application/ogg" + "\r\n").getBytes() );
+
+ socketOutputStream.write( new String("ice-url: " + url + "\r\n").getBytes() );
+ socketOutputStream.write( new String("ice-public: 1" + "\r\n").getBytes() );
+ socketOutputStream.write( new String("ice-genre: " + genre + "\r\n").getBytes() );
+ socketOutputStream.write( new String("ice-name: " + title + "\r\n").getBytes() );
+ socketOutputStream.write( new String("ice-description: " + desc + "\r\n").getBytes() );
+ // socketOutputStream.write( new String("ice-audio-info: 1" + "\r\n").getBytes() );
+
+ socketOutputStream.write( new String("\r\n").getBytes() );
+ socketOutputStream.flush();
+ System.out.println( "OggCast Header Sent" );
+
+ if ( readHeaderResponse() ) {
+ connected = true;
+ }
+ else {
+ connected = false;
+ }
+ }
+
+ public boolean readHeaderResponse() throws IOException {
+
+ InputStream socketInputStream = socket.getInputStream();
+ InputStreamReader isr = new InputStreamReader( socketInputStream );
+ BufferedReader br = new BufferedReader( isr );
+
+ String responseHeader = br.readLine();
+ System.out.println( responseHeader );
+
+ int responseCodeIndex = responseHeader.indexOf( ' ' );
+ int responseCode = Integer.parseInt( responseHeader.substring( responseCodeIndex+1, responseCodeIndex+4 ) );
+
+ if ( responseCode >= 200 && responseCode < 300 )
+ return true;
+
+ return false;
+ }
+
+ public void write( byte[] foo, int foostart, int foolength, byte[] bar, int barstart, int barlength ) {
+
+ try {
+ socketOutputStream.write( foo, foostart, foolength );
+ socketOutputStream.write( bar, barstart, barlength );
+ socketOutputStream.flush();
+ }
+ catch ( IOException e ) {
+ connected = false;
+ System.out.println( "Socket Connection Error: http://" + host + ":" + port );
+ System.out.println( e );
+ }
+ }
+
+ public void close() {
+ try {
+ connected = false;
+ socket.shutdownOutput();
+ socketOutputStream.close();
+ socket.close();
+ socketOutputStream = null;
+ socket = null;
+ }
+ catch ( Exception e ) {
+ System.out.println( "Socket Connection Error: http://" + host + ":" + port );
+ System.out.println( e );
+ }
+ System.out.println( "Disconnected from: http://" + host + ":" + port );
+ }
+}
Added: trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,44 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+import static org.xiph.libvorbis.vorbis_constants.integer_constants.*;
+
+public class adj_stereo {
+
+ int[] pre;
+ int[] post;
+ float[] kHz;
+ float[] lowpasskHz;
+
+
+ public adj_stereo( int[] _pre, int[] _post, float[] _kHz, float[] _lowpasskHz ) {
+
+ pre = new int[ PACKETBLOBS ];
+ System.arraycopy( _pre, 0, pre, 0, _pre.length );
+
+ post = new int[ PACKETBLOBS ];
+ System.arraycopy( _post, 0, post, 0, _post.length );
+
+ kHz = new float[ PACKETBLOBS ];
+ System.arraycopy( _kHz, 0, kHz, 0, _kHz.length );
+
+ lowpasskHz = new float[ PACKETBLOBS ];
+ System.arraycopy( _lowpasskHz, 0, lowpasskHz, 0, _lowpasskHz.length );
+ }
+
+ public adj_stereo( adj_stereo src ) {
+
+ this( src.pre, src.post, src.kHz, src.lowpasskHz );
+ }
+}
\ No newline at end of file
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,23 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+class alloc_chain {
+
+ Object[] ptr;
+
+ alloc_chain next;
+
+
+ public alloc_chain() {}
+}
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/att3.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/att3.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/att3.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,37 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+import static org.xiph.libvorbis.vorbis_constants.integer_constants.*;
+
+public class att3 {
+
+ int[] att; // att[P_NOISECURVES]
+ float boost;
+ float decay;
+
+
+ public att3( int[] _att, float _boost, float _decay ) {
+
+ att = new int[ P_NOISECURVES ];
+ System.arraycopy( _att, 0, att, 0, _att.length );
+
+ boost = _boost;
+ decay = _decay;
+ }
+
+ public att3( att3 src ) {
+
+ this( src.att, src.boost, src.decay );
+ }
+}
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/att3.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,52 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+// NOTE - rewritten in Vorbislib 1.1.2
+
+class bitrate_manager_info { // detailed bitrate management setup
+
+ int avg_rate; // long avg_rate
+ int min_rate; // long min_rate
+ int max_rate; // long max_rate
+ int reservoir_bits; // long reservoir_bits
+ float reservoir_bias; // double reservoir_bias
+
+ float slew_damp; // double slew_damp
+
+ /*
+ float queue_avg_time;
+ float queue_avg_center;
+ float queue_minmax_time;
+ float queue_hardmin;
+ float queue_hardmax;
+ float queue_avgmin;
+ float queue_avgmax;
+
+ float avgfloat_downslew_max;
+ float avgfloat_upslew_max;
+ */
+
+ public bitrate_manager_info() {}
+
+ public bitrate_manager_info( int _avg_rate, int _min_rate, int _max_rate, int _reservoir_bits, float _reservoir_bias, float _slew_damp ) {
+
+ avg_rate = _avg_rate;
+ min_rate = _min_rate;
+ max_rate = _max_rate;
+ reservoir_bits = _reservoir_bits;
+ reservoir_bias = _reservoir_bias;
+
+ slew_damp = _slew_damp;
+ }
+}
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,61 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+import static org.xiph.libvorbis.vorbis_constants.integer_constants.*;
+
+class bitrate_manager_state {
+
+ int managed;
+
+ int avg_reservoir; // long
+ int minmax_reservoir; // long
+ int avg_bitsper; // long
+ int min_bitsper; // long
+ int max_bitsper; // long
+
+ int short_per_long; // long
+ float avgfloat; // double
+
+ vorbis_block vb;
+ int choice;
+
+
+ public bitrate_manager_state( vorbis_info vi ) {
+
+ codec_setup_info ci = vi.codec_setup;
+ bitrate_manager_info bi = ci.bi;
+
+ if ( bi.reservoir_bits > 0 ) {
+
+ int ratesamples = vi.rate;
+ int halfsamples = ci.blocksizes[0]>>1;
+
+ short_per_long = ci.blocksizes[1]/ci.blocksizes[0];
+ managed=1;
+
+ avg_bitsper = new Double( Math.rint(1.*bi.avg_rate*halfsamples/ratesamples) ).intValue();
+ min_bitsper = new Double( Math.rint(1.*bi.min_rate*halfsamples/ratesamples) ).intValue();
+ max_bitsper = new Double( Math.rint(1.*bi.max_rate*halfsamples/ratesamples) ).intValue();
+
+ avgfloat = PACKETBLOBS/2;
+
+ // not a necessary fix, but one that leads to a more balanced typical initialization
+ {
+ int desired_fill = new Float(bi.reservoir_bits*bi.reservoir_bias).intValue(); // long
+ minmax_reservoir = desired_fill;
+ avg_reservoir = desired_fill;
+ }
+ }
+ }
+}
\ No newline at end of file
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,139 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis.books.coupled.resbook_44;
+
+import org.xiph.libvorbis.*;
+
+public class res_books_stereo {
+
+ public vorbis_mapping_template[] _mapres_template_44_stereo;
+
+
+ public res_books_stereo() {
+
+ vorbis_info_mapping0[] _map_nominal = new vorbis_info_mapping0[] { new vorbis_info_mapping0( 1, new int[]{0,0}, new int[]{0}, new int[]{0}, 1, new int[]{0}, new int[]{1} ),
+ new vorbis_info_mapping0( 1, new int[]{0,0}, new int[]{1}, new int[]{1}, 1, new int[]{0}, new int[]{1} ) };
+
+ vorbis_info_residue0 _residue_44_low = new vorbis_info_residue0( 0, -1, -1, 9, -1, new int[]{0}, new int[]{-1},
+ new float[] { .5f, 1.5f, 2.5f, 2.5f, 4.5f, 8.5f, 16.5f, 32.5f },
+ new float[] { .5f, .5f, .5f, 999.f, 4.5f, 8.5f, 16.5f, 32.5f } );
+
+ vorbis_info_residue0 _residue_44_mid = new vorbis_info_residue0( 0,-1, -1, 10,-1, new int[]{0}, new int[]{-1},
+ new float[] { .5f, 1.5f, 1.5f, 2.5f, 2.5f, 4.5f, 8.5f, 16.5f, 32.5f },
+ new float[] { .5f, .5f, 999.f, .5f, 999.f, 4.5f, 8.5f, 16.5f, 32.5f } );
+
+ vorbis_info_residue0 _residue_44_high = new vorbis_info_residue0( 0,-1, -1, 10,-1, new int[]{0}, new int[]{-1},
+ new float[] { .5f, 1.5f, 2.5f, 4.5f, 8.5f, 16.5f, 32.5f, 71.5f, 157.5f },
+ new float[] { .5f, 1.5f, 2.5f, 3.5f, 4.5f, 8.5f, 16.5f, 71.5f, 157.5f } );
+
+
+ resbook_44s_n1 _resbook_44s_n1 = new resbook_44s_n1();
+ resbook_44sm_n1 _resbook_44sm_n1 = new resbook_44sm_n1();
+
+ resbook_44s_0 _resbook_44s_0 = new resbook_44s_0();
+ resbook_44sm_0 _resbook_44sm_0 = new resbook_44sm_0();
+
+ resbook_44s_1 _resbook_44s_1 = new resbook_44s_1();
+ resbook_44sm_1 _resbook_44sm_1 = new resbook_44sm_1 ();
+
+ resbook_44s_2 _resbook_44s_2 = new resbook_44s_2();
+ resbook_44s_3 _resbook_44s_3 = new resbook_44s_3();
+ resbook_44s_4 _resbook_44s_4 = new resbook_44s_4();
+ resbook_44s_5 _resbook_44s_5 = new resbook_44s_5();
+ resbook_44s_6 _resbook_44s_6 = new resbook_44s_6();
+ resbook_44s_7 _resbook_44s_7 = new resbook_44s_7();
+ resbook_44s_8 _resbook_44s_8 = new resbook_44s_8();
+ resbook_44s_9 _resbook_44s_9 = new resbook_44s_9();
+
+
+ _mapres_template_44_stereo = new vorbis_mapping_template[] {
+
+ // _res_44s_n1
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_n1._huff_book__44cn1_s_short, _resbook_44sm_n1._huff_book__44cn1_sm_short, _resbook_44s_n1.books, _resbook_44sm_n1.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_n1._huff_book__44cn1_s_long, _resbook_44sm_n1._huff_book__44cn1_sm_long, _resbook_44s_n1.books, _resbook_44sm_n1.books )
+ } ),
+
+ // _res_44s_0
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_0._huff_book__44c0_s_short, _resbook_44sm_0._huff_book__44c0_sm_short, _resbook_44s_0.books, _resbook_44sm_0.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_0._huff_book__44c0_s_long, _resbook_44sm_0._huff_book__44c0_sm_long, _resbook_44s_0.books, _resbook_44sm_0.books )
+ } ),
+
+ // _res_44s_1
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_1._huff_book__44c1_s_short, _resbook_44sm_1._huff_book__44c1_sm_short, _resbook_44s_1.books, _resbook_44sm_1.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_1._huff_book__44c1_s_long, _resbook_44sm_1._huff_book__44c1_sm_long, _resbook_44s_1.books, _resbook_44sm_1.books )
+ } ),
+
+ // _res_44s_2
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_2._huff_book__44c2_s_short, _resbook_44s_2._huff_book__44c2_s_short, _resbook_44s_2.books, _resbook_44s_2.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_2._huff_book__44c2_s_long, _resbook_44s_2._huff_book__44c2_s_long, _resbook_44s_2.books, _resbook_44s_2.books )
+ } ),
+
+ // _res_44s_3
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_3._huff_book__44c3_s_short, _resbook_44s_3._huff_book__44c3_s_short, _resbook_44s_3.books, _resbook_44s_3.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_3._huff_book__44c3_s_long, _resbook_44s_3._huff_book__44c3_s_long, _resbook_44s_3.books, _resbook_44s_3.books )
+ } ),
+
+ // _res_44s_4
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_4._huff_book__44c4_s_short, _resbook_44s_4._huff_book__44c4_s_short, _resbook_44s_4.books, _resbook_44s_4.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_4._huff_book__44c4_s_long, _resbook_44s_4._huff_book__44c4_s_long, _resbook_44s_4.books, _resbook_44s_4.books )
+ } ),
+
+ // _res_44s_5
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_5._huff_book__44c5_s_short, _resbook_44s_5._huff_book__44c5_s_short, _resbook_44s_5.books, _resbook_44s_5.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_5._huff_book__44c5_s_long, _resbook_44s_5._huff_book__44c5_s_long, _resbook_44s_5.books, _resbook_44s_5.books )
+ } ),
+
+ // _res_44s_6
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_6._huff_book__44c6_s_short, _resbook_44s_6._huff_book__44c6_s_short, _resbook_44s_6.books, _resbook_44s_6.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_6._huff_book__44c6_s_long, _resbook_44s_6._huff_book__44c6_s_long, _resbook_44s_6.books, _resbook_44s_6.books )
+ } ),
+
+ // _res_44s_7
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_7._huff_book__44c7_s_short, _resbook_44s_7._huff_book__44c7_s_short, _resbook_44s_7.books, _resbook_44s_7.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_7._huff_book__44c7_s_long, _resbook_44s_7._huff_book__44c7_s_long, _resbook_44s_7.books, _resbook_44s_7.books )
+ } ),
+
+ // _res_44s_8
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_8._huff_book__44c8_s_short, _resbook_44s_8._huff_book__44c8_s_short, _resbook_44s_8.books, _resbook_44s_8.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_8._huff_book__44c8_s_long, _resbook_44s_8._huff_book__44c8_s_long, _resbook_44s_8.books, _resbook_44s_8.books )
+ } ),
+
+ // _res_44s_9
+ new vorbis_mapping_template( _map_nominal,
+ new vorbis_residue_template[] {
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_9._huff_book__44c9_s_short, _resbook_44s_9._huff_book__44c9_s_short, _resbook_44s_9.books, _resbook_44s_9.books ),
+ new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_9._huff_book__44c9_s_long, _resbook_44s_9._huff_book__44c9_s_long, _resbook_44s_9.books, _resbook_44s_9.books )
+ } ),
+ };
+ }
+}
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,1170 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis.books.coupled.resbook_44;
+
+import org.xiph.libvorbis.*;
+
+class resbook_44s_0 {
+
+ static int _vq_quantlist__44c0_s_p1_0[] = {
+ 1,
+ 0,
+ 2,
+ };
+
+ static int _vq_lengthlist__44c0_s_p1_0[] = {
+ 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 0, 0, 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,11,
+ 0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,
+ };
+
+ static float _vq_quantthresh__44c0_s_p1_0[] = {
+ -0.5f, 0.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p1_0[] = {
+ 1, 0, 2,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p1_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p1_0,
+ _vq_quantmap__44c0_s_p1_0,
+ 3,
+ 3
+ );
+
+ static static_codebook _44c0_s_p1_0 = new static_codebook(
+ 8, 6561,
+ _vq_lengthlist__44c0_s_p1_0,
+ 1, -535822336, 1611661312, 2, 0,
+ _vq_quantlist__44c0_s_p1_0,
+ null,
+ _vq_auxt__44c0_s_p1_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p2_0[] = {
+ 2,
+ 1,
+ 3,
+ 0,
+ 4,
+ };
+
+ static int _vq_lengthlist__44c0_s_p2_0[] = {
+ 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 6, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,
+ };
+
+ static float _vq_quantthresh__44c0_s_p2_0[] = {
+ -1.5f, -0.5f, 0.5f, 1.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p2_0[] = {
+ 3, 1, 0, 2, 4,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p2_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p2_0,
+ _vq_quantmap__44c0_s_p2_0,
+ 5,
+ 5
+ );
+
+ static static_codebook _44c0_s_p2_0 = new static_codebook(
+ 4, 625,
+ _vq_lengthlist__44c0_s_p2_0,
+ 1, -533725184, 1611661312, 3, 0,
+ _vq_quantlist__44c0_s_p2_0,
+ null,
+ _vq_auxt__44c0_s_p2_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p3_0[] = {
+ 4,
+ 3,
+ 5,
+ 2,
+ 6,
+ 1,
+ 7,
+ 0,
+ 8,
+ };
+
+ static int _vq_lengthlist__44c0_s_p3_0[] = {
+ 1, 3, 2, 8, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
+ 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,
+ };
+
+ static float _vq_quantthresh__44c0_s_p3_0[] = {
+ -3.5f, -2.5f, -1.5f, -0.5f, 0.5f, 1.5f, 2.5f, 3.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p3_0[] = {
+ 7, 5, 3, 1, 0, 2, 4, 6,
+ 8,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p3_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p3_0,
+ _vq_quantmap__44c0_s_p3_0,
+ 9,
+ 9
+ );
+
+ static static_codebook _44c0_s_p3_0 = new static_codebook(
+ 2, 81,
+ _vq_lengthlist__44c0_s_p3_0,
+ 1, -531628032, 1611661312, 4, 0,
+ _vq_quantlist__44c0_s_p3_0,
+ null,
+ _vq_auxt__44c0_s_p3_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p4_0[] = {
+ 4,
+ 3,
+ 5,
+ 2,
+ 6,
+ 1,
+ 7,
+ 0,
+ 8,
+ };
+
+ static int _vq_lengthlist__44c0_s_p4_0[] = {
+ 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
+ 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
+ 7, 8, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0,
+ 9, 9, 8, 8,10,10, 0, 0, 0, 8, 9, 8, 8,10,10, 0,
+ 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 10,
+ };
+
+ static float _vq_quantthresh__44c0_s_p4_0[] = {
+ -3.5f, -2.5f, -1.5f, -0.5f, 0.5f, 1.5f, 2.5f, 3.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p4_0[] = {
+ 7, 5, 3, 1, 0, 2, 4, 6,
+ 8,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p4_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p4_0,
+ _vq_quantmap__44c0_s_p4_0,
+ 9,
+ 9
+ );
+
+ static static_codebook _44c0_s_p4_0 = new static_codebook(
+ 2, 81,
+ _vq_lengthlist__44c0_s_p4_0,
+ 1, -531628032, 1611661312, 4, 0,
+ _vq_quantlist__44c0_s_p4_0,
+ null,
+ _vq_auxt__44c0_s_p4_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p5_0[] = {
+ 8,
+ 7,
+ 9,
+ 6,
+ 10,
+ 5,
+ 11,
+ 4,
+ 12,
+ 3,
+ 13,
+ 2,
+ 14,
+ 1,
+ 15,
+ 0,
+ 16,
+ };
+
+ static int _vq_lengthlist__44c0_s_p5_0[] = {
+ 1, 4, 3, 6, 6, 8, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9, 9,10,10,10,
+ 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
+ 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10,
+ 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
+ 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
+ 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,
+ 10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
+ 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 10,10,11,11,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
+ 0, 0, 0,11,10,11,11,11,11,12,12,13,13, 0, 0, 0,
+ 0, 0, 0, 0,11,11,12,11,12,12,12,12,13,13, 0, 0,
+ 0, 0, 0, 0, 0,11,11,11,12,12,12,12,13,13,13, 0,
+ 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,13,14,14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
+ 14,
+ };
+
+ static float _vq_quantthresh__44c0_s_p5_0[] = {
+ -7.5f, -6.5f, -5.5f, -4.5f, -3.5f, -2.5f, -1.5f, -0.5f,
+ 0.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 7.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p5_0[] = {
+ 15, 13, 11, 9, 7, 5, 3, 1,
+ 0, 2, 4, 6, 8, 10, 12, 14,
+ 16,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p5_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p5_0,
+ _vq_quantmap__44c0_s_p5_0,
+ 17,
+ 17
+ );
+
+ static static_codebook _44c0_s_p5_0 = new static_codebook(
+ 2, 289,
+ _vq_lengthlist__44c0_s_p5_0,
+ 1, -529530880, 1611661312, 5, 0,
+ _vq_quantlist__44c0_s_p5_0,
+ null,
+ _vq_auxt__44c0_s_p5_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p6_0[] = {
+ 1,
+ 0,
+ 2,
+ };
+
+ static int _vq_lengthlist__44c0_s_p6_0[] = {
+ 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
+ 11,12,10,11, 6, 9, 9,11,10,11,11,10,10, 6, 9, 9,
+ 11,10,11,11,10,10, 7,11,10,12,11,11,11,11,11, 7,
+ 9, 9,10,10,10,11,11,10, 6, 9, 9,11,10,10,11,10,
+ 10,
+ };
+
+ static float _vq_quantthresh__44c0_s_p6_0[] = {
+ -5.5f, 5.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p6_0[] = {
+ 1, 0, 2,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p6_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p6_0,
+ _vq_quantmap__44c0_s_p6_0,
+ 3,
+ 3
+ );
+
+ static static_codebook _44c0_s_p6_0 = new static_codebook(
+ 4, 81,
+ _vq_lengthlist__44c0_s_p6_0,
+ 1, -529137664, 1618345984, 2, 0,
+ _vq_quantlist__44c0_s_p6_0,
+ null,
+ _vq_auxt__44c0_s_p6_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p6_1[] = {
+ 5,
+ 4,
+ 6,
+ 3,
+ 7,
+ 2,
+ 8,
+ 1,
+ 9,
+ 0,
+ 10,
+ };
+
+ static int _vq_lengthlist__44c0_s_p6_1[] = {
+ 2, 3, 3, 6, 6, 7, 7, 7, 7, 7, 8,10,10,10, 6, 6,
+ 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
+ 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
+ 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8,
+ 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
+ 10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+
+ static float _vq_quantthresh__44c0_s_p6_1[] = {
+ -4.5f, -3.5f, -2.5f, -1.5f, -0.5f, 0.5f, 1.5f, 2.5f,
+ 3.5f, 4.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p6_1[] = {
+ 9, 7, 5, 3, 1, 0, 2, 4,
+ 6, 8, 10,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p6_1 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p6_1,
+ _vq_quantmap__44c0_s_p6_1,
+ 11,
+ 11
+ );
+
+ static static_codebook _44c0_s_p6_1 = new static_codebook(
+ 2, 121,
+ _vq_lengthlist__44c0_s_p6_1,
+ 1, -531365888, 1611661312, 4, 0,
+ _vq_quantlist__44c0_s_p6_1,
+ null,
+ _vq_auxt__44c0_s_p6_1,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p7_0[] = {
+ 6,
+ 5,
+ 7,
+ 4,
+ 8,
+ 3,
+ 9,
+ 2,
+ 10,
+ 1,
+ 11,
+ 0,
+ 12,
+ };
+
+ static int _vq_lengthlist__44c0_s_p7_0[] = {
+ 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
+ 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
+ 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
+ 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
+ 10,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
+ 11,11,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
+ 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
+ 0, 0, 0, 0,11,11,11,11,13,12,13,13, 0, 0, 0, 0,
+ 0,12,12,11,11,12,12,13,13,
+ };
+
+ static float _vq_quantthresh__44c0_s_p7_0[] = {
+ -27.5f, -22.5f, -17.5f, -12.5f, -7.5f, -2.5f, 2.5f, 7.5f,
+ 12.5f, 17.5f, 22.5f, 27.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p7_0[] = {
+ 11, 9, 7, 5, 3, 1, 0, 2,
+ 4, 6, 8, 10, 12,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p7_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p7_0,
+ _vq_quantmap__44c0_s_p7_0,
+ 13,
+ 13
+ );
+
+ static static_codebook _44c0_s_p7_0 = new static_codebook(
+ 2, 169,
+ _vq_lengthlist__44c0_s_p7_0,
+ 1, -526516224, 1616117760, 4, 0,
+ _vq_quantlist__44c0_s_p7_0,
+ null,
+ _vq_auxt__44c0_s_p7_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p7_1[] = {
+ 2,
+ 1,
+ 3,
+ 0,
+ 4,
+ };
+
+ static int _vq_lengthlist__44c0_s_p7_1[] = {
+ 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+ 6, 6, 5, 5, 6, 6, 6, 5, 5,
+ };
+
+ static float _vq_quantthresh__44c0_s_p7_1[] = {
+ -1.5f, -0.5f, 0.5f, 1.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p7_1[] = {
+ 3, 1, 0, 2, 4,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p7_1 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p7_1,
+ _vq_quantmap__44c0_s_p7_1,
+ 5,
+ 5
+ );
+
+ static static_codebook _44c0_s_p7_1 = new static_codebook(
+ 2, 25,
+ _vq_lengthlist__44c0_s_p7_1,
+ 1, -533725184, 1611661312, 3, 0,
+ _vq_quantlist__44c0_s_p7_1,
+ null,
+ _vq_auxt__44c0_s_p7_1,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p8_0[] = {
+ 2,
+ 1,
+ 3,
+ 0,
+ 4,
+ };
+
+ static int _vq_lengthlist__44c0_s_p8_0[] = {
+ 1, 5, 5,10,10, 6, 9, 8,10,10, 6,10, 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, 8,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,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,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,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,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,
+ };
+
+ static float _vq_quantthresh__44c0_s_p8_0[] = {
+ -331.5f, -110.5f, 110.5f, 331.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p8_0[] = {
+ 3, 1, 0, 2, 4,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p8_0 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p8_0,
+ _vq_quantmap__44c0_s_p8_0,
+ 5,
+ 5
+ );
+
+ static static_codebook _44c0_s_p8_0 = new static_codebook(
+ 4, 625,
+ _vq_lengthlist__44c0_s_p8_0,
+ 1, -518283264, 1627103232, 3, 0,
+ _vq_quantlist__44c0_s_p8_0,
+ null,
+ _vq_auxt__44c0_s_p8_0,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p8_1[] = {
+ 6,
+ 5,
+ 7,
+ 4,
+ 8,
+ 3,
+ 9,
+ 2,
+ 10,
+ 1,
+ 11,
+ 0,
+ 12,
+ };
+
+ static int _vq_lengthlist__44c0_s_p8_1[] = {
+ 1, 4, 4, 6, 6, 7, 7, 9, 9,11,12,13,12, 6, 5, 5,
+ 7, 7, 8, 8,10, 9,12,12,12,12, 6, 5, 5, 7, 7, 8,
+ 8,10, 9,12,11,11,13,16, 7, 7, 8, 8, 9, 9,10,10,
+ 12,12,13,12,16, 7, 7, 8, 7, 9, 9,10,10,11,12,12,
+ 13,16,10,10, 8, 8,10,10,11,12,12,12,13,13,16,11,
+ 10, 8, 7,11,10,11,11,12,11,13,13,16,16,16,10,10,
+ 10,10,11,11,13,12,13,13,16,16,16,11, 9,11, 9,15,
+ 13,12,13,13,13,16,16,16,15,13,11,11,12,13,12,12,
+ 14,13,16,16,16,14,13,11,11,13,12,14,13,13,13,16,
+ 16,16,16,16,13,13,13,12,14,13,14,14,16,16,16,16,
+ 16,13,13,12,12,14,14,15,13,
+ };
+
+ static float _vq_quantthresh__44c0_s_p8_1[] = {
+ -93.5f, -76.5f, -59.5f, -42.5f, -25.5f, -8.5f, 8.5f, 25.5f,
+ 42.5f, 59.5f, 76.5f, 93.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p8_1[] = {
+ 11, 9, 7, 5, 3, 1, 0, 2,
+ 4, 6, 8, 10, 12,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p8_1 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p8_1,
+ _vq_quantmap__44c0_s_p8_1,
+ 13,
+ 13
+ );
+
+ static static_codebook _44c0_s_p8_1 = new static_codebook(
+ 2, 169,
+ _vq_lengthlist__44c0_s_p8_1,
+ 1, -522616832, 1620115456, 4, 0,
+ _vq_quantlist__44c0_s_p8_1,
+ null,
+ _vq_auxt__44c0_s_p8_1,
+ null,
+ 0
+ );
+
+ static int _vq_quantlist__44c0_s_p8_2[] = {
+ 8,
+ 7,
+ 9,
+ 6,
+ 10,
+ 5,
+ 11,
+ 4,
+ 12,
+ 3,
+ 13,
+ 2,
+ 14,
+ 1,
+ 15,
+ 0,
+ 16,
+ };
+
+ static int _vq_lengthlist__44c0_s_p8_2[] = {
+ 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
+ 8,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
+ 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
+ 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 8, 9, 9,
+ 9, 9, 9,10, 9,10,10,10,10, 7, 7, 8, 8, 9, 9, 9,
+ 9, 9, 9,10, 9,10,10,10,10,10, 8, 8, 8, 9, 9, 9,
+ 9, 9, 9, 9,10,10,10, 9,11,10,10,10,10, 8, 8, 9,
+ 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,11,11, 9, 9,
+ 9, 9, 9, 9, 9, 9,10, 9, 9,10,11,10,10,11,11, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,10,11,
+ 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 11,11,11,11, 9,10, 9,10, 9, 9, 9, 9,10, 9,10,11,
+ 10,11,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9,10,11,
+ 11,10,11,11,10,11,10,10,10, 9, 9, 9, 9,10, 9, 9,
+ 10,11,10,11,11,11,11,10,11,10,10, 9,10, 9, 9, 9,
+ 10,
+ };
+
+ static float _vq_quantthresh__44c0_s_p8_2[] = {
+ -7.5f, -6.5f, -5.5f, -4.5f, -3.5f, -2.5f, -1.5f, -0.5f,
+ 0.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 7.5f,
+ };
+
+ static int _vq_quantmap__44c0_s_p8_2[] = {
+ 15, 13, 11, 9, 7, 5, 3, 1,
+ 0, 2, 4, 6, 8, 10, 12, 14,
+ 16,
+ };
+
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p8_2 = new encode_aux_threshmatch(
+ _vq_quantthresh__44c0_s_p8_2,
+ _vq_quantmap__44c0_s_p8_2,
+ 17,
+ 17
+ );
+
+ static static_codebook _44c0_s_p8_2 = new static_codebook(
+ 2, 289,
+ _vq_lengthlist__44c0_s_p8_2,
+ 1, -529530880, 1611661312, 5, 0,
+ _vq_quantlist__44c0_s_p8_2,
+ null,
+ _vq_auxt__44c0_s_p8_2,
+ null,
+ 0
+ );
+
+
+ static int _huff_lengthlist__44c0_s_short[] = {
+ 9, 8,12,11,12,13,14,14,16, 6, 1, 5, 6, 6, 9,12,
+ 14,17, 9, 4, 5, 9, 7, 9,13,15,16, 8, 5, 8, 6, 8,
+ 10,13,17,17, 9, 6, 7, 7, 8, 9,13,15,17,11, 8, 9,
+ 9, 9,10,12,16,16,13, 7, 8, 7, 7, 9,12,14,15,13,
+ 6, 7, 5, 5, 7,10,13,13,14, 7, 8, 5, 6, 7, 9,10,
+ 12,
+ };
+
+ static int _huff_lengthlist__44c0_s_long[] = {
+ 5, 4, 8, 9, 8, 9,10,12,15, 4, 1, 5, 5, 6, 8,11,
+ 12,12, 8, 5, 8, 9, 9,11,13,12,12, 9, 5, 8, 5, 7,
+ 9,12,13,13, 8, 6, 8, 7, 7, 9,11,11,11, 9, 7, 9,
+ 7, 7, 7, 7,10,12,10,10,11, 9, 8, 7, 7, 9,11,11,
+ 12,13,12,11, 9, 8, 9,11,13,16,16,15,15,12,10,11,
+ 12,
+ };
+
+
+ static_codebook zero = null;
+
+ public static_bookblock books;
+ public static_codebook _huff_book__44c0_s_short;
+ public static_codebook _huff_book__44c0_s_long;
+
+
+ public resbook_44s_0() {
+
+ _huff_book__44c0_s_short = new static_codebook(
+ 2, 81,
+ _huff_lengthlist__44c0_s_short,
+ 0, 0, 0, 0, 0,
+ null,
+ null,
+ null,
+ null,
+ 0
+ );
+
+ _huff_book__44c0_s_long = new static_codebook(
+ 2, 81,
+ _huff_lengthlist__44c0_s_long,
+ 0, 0, 0, 0, 0,
+ null,
+ null,
+ null,
+ null,
+ 0
+ );
+
+ books = new static_bookblock( new static_codebook[][] {
+
+ { zero },
+ { zero, zero, _44c0_s_p1_0 },
+ { zero, zero, _44c0_s_p2_0 },
+ { zero, zero, _44c0_s_p3_0 },
+ { zero, zero, _44c0_s_p4_0 },
+ { zero, zero, _44c0_s_p5_0 },
+ { _44c0_s_p6_0, _44c0_s_p6_1 },
+ { _44c0_s_p7_0, _44c0_s_p7_1 },
+ { _44c0_s_p8_0, _44c0_s_p8_1, _44c0_s_p8_2 },
+ } );
+ }
+}
Property changes on: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java 2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,1151 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * *
+ ********************************************************************/
+
+package org.xiph.libvorbis.books.coupled.resbook_44;
+
+import org.xiph.libvorbis.*;
+
+class resbook_44s_1 {
+
+ static int _vq_quantlist__44c1_s_p1_0[] = {
+ 1,
+ 0,
+ 2,
+ };
+
+ static int _vq_lengthlist__44c1_s_p1_0[] = {
+ 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
+ 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+ 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+ 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
+ 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,