import socket
import base64
import hackercodecs
import telnetlib

s=socket.socket()

s.connect(('172.31.2.59',51966))


def recvline():
	msg = ''
	done = False
	while not done:
		c = s.recv(1)
		msg = msg + c
		if c == '\n':
			done = True
	return msg[:-1]

def send(msg):
	print(msg)
	s.sendall(msg+'\n')

def solve(data):
	print("input", data)
	if data == '': return None
	if data == '? ': return None

	if set(data) == set('.- '):
		datad = data.decode('morse')
		print('decoded morse')
		return datad
	#end if

	if ' ' in data:
		datad = ''.join([chr(int(data[3*i:3*i+2], 16)) for i in range((len(data)+2)//3)])
		print('decoded hex')
		return datad
	#end if
	
	if set(data) == set('01'):
		datad = ''.join([chr(int(data[8*i:8*i+8], 2)) for i in range(len(data)>>3)])
		print('decoded binary')
		return datad
	#end if
	
	try:
		ret = base64.b64decode(data)
	except:
		return None
	#end try
	print('decoded base64')
	return ret

#s.sendall('a')

#print s.recv(1)
print recvline()
print recvline()
print recvline()
#while True:
print('jav0')
b64 = recvline()
print b64
b64d = base64.b64decode(b64)
send(b64d)

print('junk', recvline())
print('junk', recvline())

print('jav1')
mmor = recvline()
print('mmor', mmor)
mmord = mmor.decode('morse')
print('mmord', mmord)
send(mmord)

#'01110011011101000111001001101001011011100110011101111011011000010110000101111001011100110011001101000010010110000100111101001010011100010011011001010011011010100100001001000100010100010101001001010011010010010011011101001010010000010111000101101010011101010100011100110010010100110111001001000101010101010100101001111101'

junk = recvline()
print('junk', junk)
#if 'junk' != '? ': print('junk', recvline())

# binary
print('jav2')
data = recvline()
print('data', data)
datad = ''.join([chr(int(data[8*i:8*i+8], 2)) for i in range(len(data)>>3)])
print('datad', datad)
send(datad)

print('huh', recvline())

junk = recvline()
print('junk', junk)
#if 'junk' != '? ': print('junk', recvline())

# hex
print('jav3')
data = recvline()
print('data', data)
datad = ''.join([chr(int(data[3*i:3*i+2], 16)) for i in range((len(data)+2)//3)])
print('datad', datad)
send(datad)

print('huh', recvline())

junk = recvline()
print('junk', junk)

print('jav4')
b64 = recvline()
print b64
b64d = base64.b64decode(b64)
send(b64d)

print('junk', recvline())
print('junk', recvline())

print('jav5')
mmor = recvline()
print('mmor', mmor)
mmord = mmor.decode('morse')
print('mmord', mmord)
send(mmord)

junk = recvline()
print('junk', junk)

# binary
print('jav6')
data = recvline()
print('data', data)
datad = ''.join([chr(int(data[8*i:8*i+8], 2)) for i in range(len(data)>>3)])
print('datad', datad)
send(datad)

junk = recvline()
print('junk', junk)
if 'junk' != '? ': print('junk', recvline())

# hex
print('jav7')
data = recvline()
print('data', data)
datad = ''.join([chr(int(data[3*i:3*i+2], 16)) for i in range((len(data)+2)//3)])
print('datad', datad)
send(datad)

junk = recvline()
print('junk', junk)
if 'junk' != '? ': print('junk', recvline())

print('jav8')
b64 = recvline()
print('b64', b64)
b64d = base64.b64decode(b64)
send(b64d)

print('junk', recvline())
print('junk', recvline())

print('jav9')
mmor = recvline()
print('mmor', mmor)
mmord = mmor.decode('morse')
print('mmord', mmord)
send(mmord)

junk = recvline()
print('junk', junk)

# binary
print('jav10')
data = recvline()
print('data', data)
datad = ''.join([chr(int(data[8*i:8*i+8], 2)) for i in range(len(data)>>3)])
print('datad', datad)
send(datad)

junk = recvline()
print('junk', junk)
if 'junk' != '? ': print('junk', recvline())

# hex
print('jav11')
data = recvline()
print('data', data)
datad = ''.join([chr(int(data[3*i:3*i+2], 16)) for i in range((len(data)+2)//3)])
print('datad', datad)
send(datad)

junk = recvline()
print('junk', junk)
if 'junk' != '? ': print('junk', recvline())

print('jav12')
b64 = recvline()
print('b64', b64)
b64d = base64.b64decode(b64)
send(b64d)

i = 0
while True:
	#break
	for j in range(3):
		xinput = recvline()
		try:
			detected = solve(xinput)
		except:
			break
		#end if
		if detected: break
	#next j
	if not detected:
		break
	print('javy {0} {1}'.format(i, detected))
	#unk = recvline()
	#if unk == b'': break
	print(xinput)
	send(detected)
	i += 1

ts = telnetlib.Telnet()
ts.sock = s
ts.interact()
exit(1)

i = 0
while True:
	print('javx {0}'.format(i))
	b64 = recvline()
	if b64 == b'': break
	print b64
	#b64d = base64.b64decode(b64)
	send(b64d)
	i += 1

print recvline()
print recvline()
print recvline()
