def load_code(self):
    """
    Returns a Python code object like xdis.unmarshal.load_code(),
    but in we decrypt the data in self.bufstr.

    That is:
      * calculate the TEA key,
      * decrypt self.bufstr
      * create and return a Python code-object
    """
    a = self.load_int()
    b = self.load_int()
    key = get_keys(a, b)
    padsize = (b + 15) & ~0xf
    intsize = padsize/4
    data = self.bufstr[self.bufpos:self.bufpos+padsize]
    # print("%d: %d (%d=%d)" % (self.bufpos, b, padsize, len(data)))
    data = list(struct.unpack('<%dL' % intsize, data))
    tea_decipher(data, key)
    self.bufpos += padsize
    obj = xmarshal._FastUnmarshaller(struct.pack('<%dL' % intsize, *data))
    code = obj.load_code()
    co_code = patch(code.co_code)
    if PYTHON3:
        return Code2Compat(code.co_argcount, code.co_nlocals, code.co_stacksize,
                           code.co_flags,
                           co_code, code.co_consts, code.co_names, code.co_varnames,
                           code.co_filename, code.co_name, code.co_firstlineno,
                           code.co_lnotab, code.co_freevars, code.co_cellvars)
    else:
        return types.CodeType(code.co_argcount, code.co_nlocals, code.co_stacksize, code.co_flags,
                              co_code, code.co_consts, code.co_names, code.co_varnames,
                              code.co_filename, code.co_name, code.co_firstlineno,
                              code.co_lnotab, code.co_freevars, code.co_cellvars)
Returns a Python code object like xdis.unmarshal.load_code(),
    but in we decrypt the data in self.bufstr.

    That is:
      * calculate the TEA key,
      * decrypt self.bufstr
      * create and return a Python code-object