'Constructor.
:param vfg:                 An already constructed VFG. If not specified, a new VFG will be created with other
specified parameters. `vfg` and `start_addr` cannot both be unspecified.
:param start_addr:          The address where to start the analysis (typically, a function\'s entry point).
:param interfunction_level: See VFG analysis.
:param context_sensitivity_level: See VFG analysis.
:param keep_data:           Whether we keep set of addresses as edges in the graph, or just the cardinality of
the sets, which can be used as a "weight".'

def __init__(self, vfg=None, start_addr=None, interfunction_level=0, context_sensitivity_level=2, keep_data=False):

    if ((vfg is None) and (start_addr is None)):
        raise AngrDDGError('Argument    vfg    and    start_addr    cannot    both    be    unspecified.')
    if (vfg is not None):
        self._vfg = vfg
    else:
        self._vfg = self.project.analyses.VFG(function_start=start_addr, interfunction_level=interfunction_level, context_sensitivity_level=context_sensitivity_level)
    self.graph = networkx.DiGraph()
    self.keep_data = keep_data
    self._simproc_map = {}
    self._imarks = {}
    self._explore()
