'This is a very important method which is called in order to create
mutants. Usually called from fuzzer.py module.'

@classmethod
def create_mutants(cls, freq, mutant_str_list, fuzzable_param_list, append, fuzzer_config):

    if (not fuzzer_config['fuzz_url_parts']):
        return []
    res = []
    path_sep = '/'
    path = freq.get_url().get_path()
    path_chunks = path.split(path_sep)
    for (idx, p_chunk) in enumerate(path_chunks):
        if (not p_chunk):
            continue
        for mutant_str in mutant_str_list:
            url_start = path_sep.join((path_chunks[:idx] + ['']))
            url_end = path_sep.join(([''] + path_chunks[(idx + 1):]))
            url_token = ((p_chunk if append else '') + mutant_str)
            url_parts_container = URLPartsContainer(url_start, url_token, url_end)
            freq_copy = copy.deepcopy(freq)
            m = cls(freq_copy)
            m.set_dc(url_parts_container)
            res.append(m)
            freq_copy = copy.deepcopy(freq)
            m2 = cls(freq_copy)
            m2.set_dc(url_parts_container)
            m2.set_double_encoding(True)
            if (m2.get_url() != m.get_url()):
                res.append(m2)
    return res
