private static EffectQuantum.CallQuantum substitute(EffectQuantum.CallQuantum call, EKey pKey, Effects pEffects) {
    List<DataValue> list = new ArrayList<>();
    boolean same = true;
    for (DataValue value : call.data) {
      DataValue newValue = substitute(value, pKey, pEffects);
      same &= newValue.equals(value);
      list.add(newValue);
    }
    return same ? call : new EffectQuantum.CallQuantum(call.key, list.toArray(DataValue.EMPTY), call.isStatic);
  }
private static EffectQuantum.CallQuantum substitute(EffectQuantum.CallQuantum call, EKey pKey, Effects pEffects)