content: // Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
  // Jad home page: http://www.kpdus.com/jad.html
  // Decompiler options: packimports(3) 
  
  import java.math.BigInteger;
  
  public final class Stream extends NodeSub {
  
  	public static Stream create() {
  		synchronized (nodeList) {
  			Stream stream = null;
  			if (anInt1412 > 0) {
  				anInt1412--;
  				stream = (Stream) nodeList.popHead();
  			}
  			if (stream != null) {
  				stream.currentOffset = 0;
  				return stream;
  			}
  		}
  		Stream stream_1 = new Stream(null);
  		stream_1.currentOffset = 0;
  		stream_1.buffer = new byte[5000];
  		return stream_1;
  	}
  	
  	public int method426() {
  		return buffer[currentOffset++] - 128 & 0xff;
  	}	
  
  	public Stream(byte abyte0[]) {
  		buffer = abyte0;
  		currentOffset = 0;
  	}
  
  	public void createFrame(int i) {
  		buffer[currentOffset++] = (byte) (i + encryption.getNextKey());
  	}
  
  	public void writeWordBigEndian(int i) {
  		buffer[currentOffset++] = (byte) i;
  	}
  
  	public void writeWord(int i) {
  		buffer[currentOffset++] = (byte) (i >> 8);
  		buffer[currentOffset++] = (byte) i;
  	}
  
  	public void method400(int i) {
  		buffer[currentOffset++] = (byte) i;
  		buffer[currentOffset++] = (byte) (i >> 8);
  	}
  
  	public void writeDWordBigEndian(int i) {
  		buffer[currentOffset++] = (byte) (i >> 16);
  		buffer[currentOffset++] = (byte) (i >> 8);
  		buffer[currentOffset++] = (byte) i;
  	}
  
  	public void writeDWord(int i) {
  		buffer[currentOffset++] = (byte) (i >> 24);
  		buffer[currentOffset++] = (byte) (i >> 16);
  		buffer[currentOffset++] = (byte) (i >> 8);
  		buffer[currentOffset++] = (byte) i;
  	}
  
  	public void method403(int j) {
  		buffer[currentOffset++] = (byte) j;
  		buffer[currentOffset++] = (byte) (j >> 8);
  		buffer[currentOffset++] = (byte) (j >> 16);
  		buffer[currentOffset++] = (byte) (j >> 24);
  	}
  
  	public void writeQWord(long l) {
  		try {
  			buffer[currentOffset++] = (byte) (int) (l >> 56);
  			buffer[currentOffset++] = (byte) (int) (l >> 48);
  			buffer[currentOffset++] = (byte) (int) (l >> 40);
  			buffer[currentOffset++] = (byte) (int) (l >> 32);
  			buffer[currentOffset++] = (byte) (int) (l >> 24);
  			buffer[currentOffset++] = (byte) (int) (l >> 16);
  			buffer[currentOffset++] = (byte) (int) (l >> 8);
  			buffer[currentOffset++] = (byte) (int) l;
  		} catch (RuntimeException runtimeexception) {
  			Signlink.reporterror("14395, " + 5 + ", " + l + ", " + runtimeexception.toString());
  			throw new RuntimeException();
  		}
  	}
  
  	public void writeString(String s) {
  		// s.getBytes(0, s.length(), buffer, currentOffset); //deprecated
  		System.arraycopy(s.getBytes(), 0, buffer, currentOffset, s.length());
  		currentOffset += s.length();
  		buffer[currentOffset++] = 10;
  	}
  
  	public void writeBytes(byte abyte0[], int i, int j) {
  		for (int k = j; k < j + i; k++) {
  			buffer[currentOffset++] = abyte0[k];
  		}
  
  	}
  
  	public void writeBytes(int i) {
  		buffer[currentOffset - i - 1] = (byte) i;
  	}
  
  	public int readUnsignedByte() {
  		return buffer[currentOffset++] & 0xff;
  	}
  
  	public byte readSignedByte() {
  		return buffer[currentOffset++];
  	}
  
  	public int readUnsignedWord() {
  		currentOffset += 2;
  		return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
  	}
  
  	public int readSignedWord() {
  		currentOffset += 2;
  		int i = ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
  		if (i > 32767) {
  			i -= 0x10000;
  		}
  		return i;
  	}
  
  	public int read3Bytes() {
  		currentOffset += 3;
  		return ((buffer[currentOffset - 3] & 0xff) << 16) + ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
  	}
  
  	public int readDWord() {
  		currentOffset += 4;
  		return ((buffer[currentOffset - 4] & 0xff) << 24) + ((buffer[currentOffset - 3] & 0xff) << 16) + ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
  	}
  
  	public long readQWord() {
  		long l = readDWord() & 0xffffffffL;
  		long l1 = readDWord() & 0xffffffffL;
  		return (l << 32) + l1;
  	}
  
  	public String readString() {
  		int i = currentOffset;
  		while (buffer[currentOffset++] != 10) {
  			;
  		}
  		return new String(buffer, i, currentOffset - i - 1);
  	}
  
  	public byte[] readBytes() {
  		int i = currentOffset;
  		while (buffer[currentOffset++] != 10) {
  			;
  		}
  		byte abyte0[] = new byte[currentOffset - i - 1];
  		System.arraycopy(buffer, i, abyte0, i - i, currentOffset - 1 - i);
  		return abyte0;
  	}
  
  	public void readBytes(int i, int j, byte abyte0[]) {
  		for (int l = j; l < j + i; l++) {
  			abyte0[l] = buffer[currentOffset++];
  		}
  	}
  
  	public void initBitAccess() {
  		bitPosition = currentOffset * 8;
  	}
  
  	public int readBits(int i) {
  		int k = bitPosition >> 3;
  		int l = 8 - (bitPosition & 7);
  		int i1 = 0;
  		bitPosition += i;
  		for (; i > l; l = 8) {
  			i1 += (buffer[k++] & anIntArray1409[l]) << i - l;
  			i -= l;
  		}
  		if (i == l) {
  			i1 += buffer[k] & anIntArray1409[l];
  		} else {
  			i1 += buffer[k] >> l - i & anIntArray1409[i];
  		}
  		return i1;
  	}
  
  	public void finishBitAccess() {
  		currentOffset = (bitPosition + 7) / 8;
  	}
  
  	public int method421() {
  		int i = buffer[currentOffset] & 0xff;
  		if (i < 128) {
  			return readUnsignedByte() - 64;
  		} else {
  			return readUnsignedWord() - 49152;
  		}
  	}
  
  	public int method422() {
  		int i = buffer[currentOffset] & 0xff;
  		if (i < 128) {
  			return readUnsignedByte();
  		} else {
  			return readUnsignedWord() - 32768;
  		}
  	}
  
  	public void doKeys() {
  		int i = currentOffset;
  		currentOffset = 0;
  		byte abyte0[] = new byte[i];
  		readBytes(i, 0, abyte0);
  		BigInteger biginteger2 = new BigInteger(abyte0);
  		BigInteger biginteger3 = biginteger2.modPow(ClientSettings.RSA_EXPONENT, ClientSettings.RSA_MODULUS);
  		byte abyte1[] = biginteger3.toByteArray();
  		currentOffset = 0;
  		writeWordBigEndian(abyte1.length);
  		writeBytes(abyte1, abyte1.length, 0);
  	}
  	
  
  	public void method424(int i) {
  		buffer[currentOffset++] = (byte) -i;
  	}
  
  	public void method425(int j) {
  		buffer[currentOffset++] = (byte) (128 - j);
  	}
  
  	public int readUnsignedByteA() {
  		return buffer[currentOffset++] - 128 & 0xff;
  	}
  
  	public int method427() {
  		return -buffer[currentOffset++] & 0xff;
  	}
  
  	public int method428() {
  		return 128 - buffer[currentOffset++] & 0xff;
  	}
  
  	public byte method429() {
  		return (byte) -buffer[currentOffset++];
  	}
  
  	public byte method430() {
  		return (byte) (128 - buffer[currentOffset++]);
  	}
  
  	public void method431(int i) {
  		buffer[currentOffset++] = (byte) i;
  		buffer[currentOffset++] = (byte) (i >> 8);
  	}
  
  	public void method432(int j) {
  		buffer[currentOffset++] = (byte) (j >> 8);
  		buffer[currentOffset++] = (byte) (j + 128);
  	}
  
  	public void method433(int j) {
  		buffer[currentOffset++] = (byte) (j + 128);
  		buffer[currentOffset++] = (byte) (j >> 8);
  	}
  
  	public int method434() {
  		currentOffset += 2;
  		return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff);
  	}
  
  	public int method435() {
  		currentOffset += 2;
  		return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] - 128 & 0xff);
  	}
  
  	public int method436() {
  		currentOffset += 2;
  		return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff);
  	}
  
  	public int method437() {
  		currentOffset += 2;
  		int j = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff);
  		if (j > 32767) {
  			j -= 0x10000;
  		}
  		return j;
  	}
  
  	public int method438() {
  		currentOffset += 2;
  		int j = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff);
  		if (j > 32767) {
  			j -= 0x10000;
  		}
  		return j;
  	}
  
  	public int method439() {
  		currentOffset += 4;
  		return ((buffer[currentOffset - 2] & 0xff) << 24) + ((buffer[currentOffset - 1] & 0xff) << 16) + ((buffer[currentOffset - 4] & 0xff) << 8) + (buffer[currentOffset - 3] & 0xff);
  	}
  
  	public int method440() {
  		currentOffset += 4;
  		return ((buffer[currentOffset - 3] & 0xff) << 24) + ((buffer[currentOffset - 4] & 0xff) << 16) + ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff);
  	}
  
  	public void method441(int i, byte abyte0[], int j) {
  		for (int k = i + j - 1; k >= i; k--) {
  			buffer[currentOffset++] = (byte) (abyte0[k] + 128);
  		}
  
  	}
  
  	public void method442(int i, int j, byte abyte0[]) {
  		for (int k = j + i - 1; k >= j; k--) {
  			abyte0[k] = buffer[currentOffset++];
  		}
  
  	}
  
  	public byte buffer[];
  	public int currentOffset;
  	public int bitPosition;
  	private static final int[] anIntArray1409 = {0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, -1};
  	public ISAACRandomGen encryption;
  	private static int anInt1412;
  	private static final NodeList nodeList = new NodeList();
  
  	// removed useless static initializer
  }
  