'Get an existing VFGNode instance from the graph.
:param BlockID block_id:                     The block ID for the node to get.
:param bool terminator_for_nonexistent_node: True if a Terminator (which is a SimProcedure stub) should be
created when there is no existing node available for the given
block ID.
:return:                                     A node in the graph, or None.
:rtype:                                      VFGNode'

def _graph_get_node(self, block_id, terminator_for_nonexistent_node=False):

    if (block_id not in self._nodes):
        l.error("Trying    to    look    up    a    node    that    we    don't    have    yet.    Is    this    okay????")
        if (not terminator_for_nonexistent_node):
            return None
        addr = block_id.addr
        func_addr = block_id.func_addr
        if (func_addr is None):
            func_addr = addr
        input_state = self.project.factory.entry_state()
        input_state.ip = addr
        pt = VFGNode(addr, block_id, input_state)
        self._nodes[block_id] = pt
        if (isinstance(self.project.arch, archinfo.ArchARM) and ((addr % 2) == 1)):
            self._thumb_addrs.add(addr)
            self._thumb_addrs.add((addr - 1))
        l.debug('Block    ID    %s    does    not    exist.    Create    a    PathTerminator    instead.', repr(block_id))
    return self._nodes[block_id]
