'Voting for the most possible base address.
:param function_starts:
:param functions:
:returns:'

def _solve_forbase_address(self, function_starts, functions):

    pseudo_base_addr = self.project.loader.main_object.min_addr
    base_addr_ctr = {}
    for s in function_starts:
        for f in functions:
            base_addr = ((s - f) + pseudo_base_addr)
            ctr = 1
            for k in function_starts:
                if (((k - base_addr) + pseudo_base_addr) in functions):
                    ctr += 1
            if (ctr > 5):
                base_addr_ctr[base_addr] = ctr
    if len(base_addr_ctr):
        (base_addr, hits) = sorted([(k, v) for (k, v) in base_addr_ctr.iteritems()], key=(lambda x: x[1]), reverse=True)[0]
        return base_addr
    else:
        return None
