# -*- coding: utf-8 -*-
import hashlib
import struct

class DataStream(bytearray):
	def append(self, v, fmt='>B'):
		self.extend(struct.pack(fmt, v))

class HashCalculator:
	def calculate(self, bytearr):
		md = hashlib.sha256()
		md.update(bytearr)
		return md.hexdigest()[:32]

_nanoenc = "?!\"#$%&'()*+,-./0123456789:;<=> @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЎўЄєІіЇїАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяčšžćśźńŭłČŠŽĆŚŽŽŬŁ№©«»±®Ґґ°™—“”’‘…–\n\r\t"
class NanoEncoding:
	def toBytes(self, st):
		ds = DataStream()
		for c in st:
			if c in _nanoenc:
				ds.append(_nanoenc.index(c))
			else:
				ds.append(_nanoenc.index('?'))
		return ds

	def toString(self, dataSt):
		arr = []
		for b in dataSt:
			if b < len(_nanoenc):
				arr.append(_nanoenc[b])
			else:
				arr.append('?')
		return ''.join(arr)

nc = NanoEncoding()
hs = HashCalculator()
print(hs.calculate(nc.toBytes("test")))