private static int eval_5cards( int c1, int c2, int c3, int c4, int c5 ) throws RuntimeException	{
	    int q; // the rank
	    short s;

	    q = (c1|c2|c3|c4|c5) >> 16;

	    /* check for Flushes and StraightFlushes - 
	    */
	    if ( (c1 & c2 & c3 & c4 & c5 & 0xF000) != 0 ) {
	    	s = flushes[q];
	    	if(s == 0) throw new RuntimeException(CARD_DUPLICATED_IN_HAND);
	    	else return s;
	    }

	    /* check for Straights and HighCard hands
	    */
	    s = unique5[q];
	    if ( s > 0 )  return ( s );

	    /* let's do it the hard way - multiply the prime nos
	    */
	    q = (c1&0xFF) * (c2&0xFF) * (c3&0xFF) * (c4&0xFF) * (c5&0xFF);
	    q = findit( q );

	    return( values[q] );
	}