public code v1

This commit is contained in:
2026-05-22 11:14:29 +02:00
parent 427197ec5a
commit b8141736eb
28859 changed files with 575079 additions and 0 deletions
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1 @@
/bin
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>afryca.consensusmodel.palomares2014WF</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
line.separator=\n
@@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
@@ -0,0 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: afryca.consensusmodel.palomares2014WF;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: %Bundle-Vendor
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Require-Bundle: afryca.consensusmodel
Automatic-Module-Name: afryca.consensusmodel.palomares2014WF
@@ -0,0 +1,12 @@
#Properties file for afryca.consensusmodel.palomares2011
Bundle-Vendor = Sinbad\u00B2
Bundle-Name = Palomares2011
afryca.consensusmodel.palomares2011.information = Paper: I. Palomares, L. Mart\u00EDnez, A Semi-Supervised Multi-Agent System Model to support Consensus Reaching Processes. IEEE Transactions on Fuzzy Systems, In press, DOI: http://dx.doi.org/10.1109/TFUZZ.2013.2272588.\\n\\nThis model was proposed as part of a multi-agent based consensus support system. AFRYCA implements a full automatic version of it, in which a feedback mechanism generates advices on assessments, but agents apply all changes automatically. The model utilized fuzzy preference relations and it computes consensus at three levels, based on degrees of similarity between experts.
afryca.consensusmodel.palomares2011.mainfeature = Fuzzy preference relations\\nSimilarities between experts\\n3-level consensus degrees\\nAutomated feedback
afryca.consensusmodel.palomares2011.name = I. Palomares et al. (2011)
afryca.consensusmodel.palomares2011.observations = \u0020
afryca.consensusmodel.palomares2011.variable.weights.description = Set of weights assigned to experts
afryca.consensusmodel.palomares2011.variable.max_rounds.description = Maximum number of discussion rounds allowed
afryca.consensusmodel.palomares2011.variable.mu.description = Consensus threshold
afryca.consensusmodel.palomares2011.variable.epsilon.description = Acceptability threshold
afryca.consensusmodel.palomares2011.variable.update_coefficient.description = Value to update (increase/decrease) the values of assessments that need to be brought closer to consensus
@@ -0,0 +1,12 @@
#Archivo de propiedades para afryca.consensusmodel.palomares2011
Bundle-Vendor = Sinbad\u00B2
Bundle-Name = Palomares2011
afryca.consensusmodel.palomares2011.information = Artículo: I. Palomares, L. Mart\u00EDnez, A Semi-Supervised Multi-Agent System Model to support Consensus Reaching Processes. IEEE Transactions on Fuzzy Systems, In press, DOI: http://dx.doi.org/10.1109/TFUZZ.2013.2272588.\\n\\nEste modelo fue propuesto como parte de un sistema de consenso multiagente. AFRYCA implementa una versión completa de él, en la cual el mecanismo de feedback genera recomendaciones sobre las valoraciones, aplicando los agentes todos los cambios de forma automática. El modelo utiliza relacioens de preferencia difusas y calcula el consenso en tres niveles, basándose en los grados de similitud entre expertos.
afryca.consensusmodel.palomares2011.mainfeature = Relaciones de preferencia difusas\\nSimilitudes entre expertos\\nGrados de consenso de 3-nivel\\nFeedback automático
afryca.consensusmodel.palomares2011.name = I. Palomares et al. (2011)
afryca.consensusmodel.palomares2011.observations = \u0020
afryca.consensusmodel.palomares2011.variable.weights.description = Conjunto de pesos a asignar a los expertos
afryca.consensusmodel.palomares2011.variable.max_rounds.description = Máximo número de rondas de discusión permitidas
afryca.consensusmodel.palomares2011.variable.mu.description = Umbral de consenso
afryca.consensusmodel.palomares2011.variable.epsilon.description = Umbral de aceptabilidad
afryca.consensusmodel.palomares2011.variable.update_coefficient.description = Valor para actualizar (incrementar/decrementar) los valores de las valoraciones que necesitan estar más cercanas al consenso
@@ -0,0 +1,6 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
OSGI-INF/
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="afryca.consensusmodel">
<ConsensusModel
ConsensusModel="afryca.consensusmodel.Palomares2011WF"
Information="%afryca.consensusmodel.palomares2011.information"
MainFeatures="%afryca.consensusmodel.palomares2011.mainfeature"
Multicriteria="false"
Name="%afryca.consensusmodel.palomares2011.name"
Observations="%afryca.consensusmodel.palomares2011.observations"
Structure="afryca.fpr"
WithFeedback="false"
id="Palomares2011">
<Variable
array_default_element_value="0"
description="%afryca.consensusmodel.palomares2011.variable.weights.description"
id="weights"
is_array="true"
is_internal="false"
type="Float">
<Array_restriction
type="element_lower_limit"
value="0">
</Array_restriction>
<Array_restriction
type="element_upper_limit"
value="1">
</Array_restriction>
<Array_restriction
type="elements_sum_value"
value="1">
</Array_restriction>
<Array_relation
type="number_of_elements_equals_to"
variable="experts">
</Array_relation>
</Variable>
<Variable
default_value="15"
description="%afryca.consensusmodel.palomares2011.variable.max_rounds.description"
id="max_rounds"
is_internal="false"
is_array="false"
type="Integer">
<Restriction
type="lower_limit"
value="1">
</Restriction>
</Variable>
<Variable
default_value="0.85"
description="%afryca.consensusmodel.palomares2011.variable.mu.description"
id="mu"
is_internal="false"
is_array="false"
type="Float">
<Restriction
type="lower_limit"
value="0">
</Restriction>
<Restriction
type="upper_limit"
value="1">
</Restriction>
</Variable>
<Variable
default_value="0.05"
description="%afryca.consensusmodel.palomares2011.variable.epsilon.description"
id="epsilon"
is_internal="false"
is_array="false"
type="Float">
<Restriction
type="lower_limit"
value="0">
</Restriction>
<Restriction
type="upper_limit"
value="1">
</Restriction>
<Relation
type="lower_than"
variable="update_coefficient">
</Relation>
</Variable>
<Variable
default_value="0.1"
description="%afryca.consensusmodel.palomares2011.variable.update_coefficient.description"
id="update_coefficient"
is_internal="false"
is_array="false"
type="Float">
<Restriction
type="lower_limit"
value="0">
</Restriction>
<Restriction
type="upper_limit"
value="1">
</Restriction>
</Variable>
</ConsensusModel>
</extension>
</plugin>
@@ -0,0 +1,313 @@
package afryca.consensusmodel;
import afryca.cm.CM;
import afryca.consensusmodel.definition.EResultElements;
import afryca.fpr.FPR;
import afryca.structure.Structure;
/**
* Palomares2011 consensus model
*
* @author Sinbad²
* @version 3.0
*/
public class Palomares2011WF extends ConsensusModel {
private static final String CONSENSUS_MODEL_NAME = "I. Palomares et al. (2011)"; //$NON-NLS-1$
private static final String WEIGHTS = "weights"; //$NON-NLS-1$
private static final String MAX_ROUNDS = "max_rounds"; //$NON-NLS-1$
private static final String MU = "mu"; //$NON-NLS-1$
private static final String EPSILON = "epsilon"; //$NON-NLS-1$
private static final String UPDATE_COEFFICIENT = "update_coefficient"; //$NON-NLS-1$
private Float[] weights;
private Integer maxrounds;
private Float mu;
private Float epsilon;
private Float update_coefficient;
private int round;
private Float cr;
private int[] advises;
@Override
protected void setModelConfiguration() {
}
@Override
protected void obtainConfigurationValues() {
weights = (Float[]) configuration.getValue(WEIGHTS);
maxrounds = (Integer) configuration.getValue(MAX_ROUNDS);
mu = (Float) configuration.getValue(MU);
epsilon = (Float) configuration.getValue(EPSILON);
update_coefficient = (Float) configuration.getValue(UPDATE_COEFFICIENT);
round = 0;
cr = 0f;
advises = null;
}
@Override
protected Float[][][] obtainVisualizeValues() {
Structure[] auxPreferences = (Structure[]) clonePreferencesUnion(preferences, ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives, preferences, weights));
Float[][][] preferencesGroupVisualization = new Float[numberOfExperts + 1][numberOfAlternatives][numberOfAlternatives];
for (int k = 0; k < numberOfExperts+1; k++) {
preferencesGroupVisualization[k] = auxPreferences[k].obtainVisualizeValues();
}
return preferencesGroupVisualization;
}
@Override
protected void preFirstSaveRoundResults() {
int round = 1;
Structure[] auxPreferences = (Structure[]) clonePreferencesUnion(preferences, ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives, preferences, weights));
CM[][] sm_matrices = ConsensusEngine.similarityMatrices(numberOfExperts, numberOfAlternatives, auxPreferences);
CM cm = ConsensusEngine.consensusMatrixBasedOnSimilarityBetweenFPRs(numberOfExperts, numberOfAlternatives, sm_matrices);
Float[] ac = ConsensusEngine.computeAlternativesConsensus(numberOfAlternatives, cm);
Float consensusDegreeAchieved = ConsensusEngine.consensusBasedOnAlternativesConsensus(numberOfAlternatives, ac);
preSaveRoundResult(round, auxPreferences,obtainVisualizeValues(), consensusDegreeAchieved);
result.put(EResultElements.initial_consensus_degree, consensusDegreeAchieved);
result.put(EResultElements.maxround, maxrounds);
result.put(EResultElements.consensus_threshold, mu);
result.put(EResultElements.consensus_model, CONSENSUS_MODEL_NAME);
}
@Override
protected void preSaveRoundResults() {
preSaveRoundResult(round + 1, preferences,obtainVisualizeValues(), cr);
}
@Override
protected void consensusRound() {
computeCollective();
CM[][] sm_matrices = ConsensusEngine.similarityMatrices(numberOfExperts, numberOfAlternatives, preferences);
CM cm = ConsensusEngine.consensusMatrixBasedOnSimilarityBetweenFPRs(numberOfExperts, numberOfAlternatives,sm_matrices);
Float[] ac = ConsensusEngine.computeAlternativesConsensus(numberOfAlternatives, cm);
computeConsensusDegree(ac);
advises = null;
if (cr < mu) {
preferences[numberOfExperts] = ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives, preferences, weights);
CM[] proximityMatrices = ConsensusEngine.similarityMatricesRespectCollective(numberOfExperts, numberOfAlternatives, preferences, preferences[numberOfExperts]);
Boolean[][] pairsOfAlternativesToChange = identifyPairsOfAlternativesToChange(numberOfAlternatives, ac, cr, cm);
CM proximityAverageMatrix = ConsensusEngine.similarityAverageMatrix(numberOfExperts, numberOfAlternatives, proximityMatrices);
Boolean[][][] changePairsOfAlternativesByExperts = identifyChangePairsOfAlternativesByExperts(numberOfExperts, numberOfAlternatives, pairsOfAlternativesToChange, proximityMatrices,
proximityAverageMatrix);
EChangeType[][][] changes = calculeChanges(numberOfExperts, numberOfAlternatives, changePairsOfAlternativesByExperts, preferences, epsilon);
makeChanges(numberOfExperts, numberOfAlternatives, preferences, changes, update_coefficient);
advises = new int[numberOfExperts];
for (int expert = 0; expert < numberOfExperts; expert++) {
advises[expert] = 0;
for (int a1 = 0; a1 < numberOfAlternatives; a1++) {
for (int a2 = 0; a2 < numberOfAlternatives; a2++) {
if (changes[expert][a1][a2] != EChangeType.NotChange) {
advises[expert] = advises[expert] + 1;
}
}
}
}
round++;
}
}
private void computeCollective(){
preferences[numberOfExperts] = ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives, preferences, weights);
}
private void computeConsensusDegree(Float[] consensusOnAlternatives){
cr = ConsensusEngine.consensusBasedOnAlternativesConsensus(numberOfAlternatives, consensusOnAlternatives);
}
@Override
protected void posSaveRoundResults() {
computeCollective();
CM[][] sm_matrices = ConsensusEngine.similarityMatrices(numberOfExperts, numberOfAlternatives, preferences);
CM cm = ConsensusEngine.consensusMatrixBasedOnSimilarityBetweenFPRs(numberOfExperts, numberOfAlternatives,sm_matrices);
Float[] ac = ConsensusEngine.computeAlternativesConsensus(numberOfAlternatives, cm);
computeConsensusDegree(ac);
posSaveRoundResult(preferences,obtainVisualizeValues(), cr, advises, preferences[numberOfExperts]);
}
@Override
protected boolean mustBeCarriedOutAnotherRound() {
return (cr < mu) && (round < maxrounds);
}
@Override
protected void saveExecutionResults() {
this.configuration.setValue(PREFERENCES, preferences);
result.put(EResultElements.number_of_rounds_required, round);
result.put(EResultElements.consensus_degree_achieved, cr);
}
/**
* Identify pairs of alternatives to change
*
* @param alternatives
* Number of alternatives
* @param ac
* Alternatives consensus
* @param cr
* Overall consensus degree
* @param cm
* Consensus matrix
* @return Pairs of alternatives to change
*/
private static Boolean[][] identifyPairsOfAlternativesToChange(Integer alternatives, Float[] ac, Float cr, CM cm) {
Boolean[][] result = new Boolean[alternatives][alternatives];
Boolean change;
for (int i = 0; i < alternatives; i++) {
for (int j = 0; j < alternatives; j++) {
change = false;
if (i != j) {
if (ac[i] < cr) {
if ((float) cm.getValue(i, j) < cr) {
change = true;
}
}
}
result[i][j] = change;
}
}
return result;
}
/**
* Identify change in pairs of alternatives by experts
*
* @param experts
* Number of experts
* @param alternatives
* Number of alternatives
* @param pairsOfAlternativesToChange
* Pairs of alternatives to change
* @param proximityMatrices
* Proximity matrices
* @param proximityAverageMatrix
* Proximity average matrix
* @return Change in pairs of alternatives by experts
*/
private static Boolean[][][] identifyChangePairsOfAlternativesByExperts(Integer experts, Integer alternatives,
Boolean[][] pairsOfAlternativesToChange, CM[] proximityMatrices, CM proximityAverageMatrix) {
Boolean[][][] result = new Boolean[experts][alternatives][alternatives];
Boolean change;
for (int expert = 0; expert < experts; expert++) {
for (int i = 0; i < alternatives; i++) {
for (int j = 0; j < alternatives; j++) {
change = false;
if (pairsOfAlternativesToChange[i][j]) {
if ((float) proximityMatrices[expert].getValue(i, j) < (float) proximityAverageMatrix.getValue(i, j)) {
change = true;
}
}
result[expert][i][j] = change;
}
}
}
return result;
}
/**
* Calcule changes to make
*
* @param experts
* Number of experts
* @param alternatives
* Number of alternatives
* @param changePairsOfAlternativesByExperts
* Change in pairs of alternatives by experts
* @param preferences
* All FPR.
* @param epsilon
* Acceptability threshold
* @return Changes to make
*/
private static EChangeType[][][] calculeChanges(Integer experts, Integer alternatives,
Boolean[][][] changePairsOfAlternativesByExperts, Structure[] preferences, Float epsilon) {
EChangeType[][][] result = new EChangeType[experts][alternatives][alternatives];
Float difference;
for (int expert = 0; expert < experts; expert++) {
for (int i = 0; i < alternatives; i++) {
for (int j = 0; j < alternatives; j++) {
if (changePairsOfAlternativesByExperts[expert][i][j]) {
difference = (Float) preferences[expert].getValue(i, j) - (Float) preferences[experts].getValue(i, j);
if (difference < (-epsilon)) {
result[expert][i][j] = EChangeType.Increase;
} else if (difference > epsilon) {
result[expert][i][j] = EChangeType.Decrease;
} else {
result[expert][i][j] = EChangeType.NotChange;
}
} else {
result[expert][i][j] = EChangeType.NotChange;
}
}
}
}
return result;
}
/**
* Make preferences changes
*
* @param experts
* Number of experts
* @param alternatives
* Number of alternatives
* @param preferences
* All FPR
* @param changes
* Changes to make
* @param updateCoeficient
* Update coefficient
*/
private static void makeChanges(Integer experts, Integer alternatives, Structure[] preferences, EChangeType[][][] changes,
Float updateCoeficient) {
float value;
EChangeType change;
for (int expert = 0; expert < experts; expert++) {
for (int i = 0; i < alternatives; i++) {
for (int j = 0; j < alternatives; j++) {
change = changes[expert][i][j];
if (change != EChangeType.NotChange) {
value = (Float) preferences[expert].getValue(i, j);
if (change == EChangeType.Increase) {
if (value <= (1 - updateCoeficient)) {
value += updateCoeficient;
} else {
value = 1f;
}
} else if (change == EChangeType.Decrease) {
if ((value - updateCoeficient) >= 0f) {
value -= updateCoeficient;
} else {
value = 0f;
}
}
((FPR) preferences[expert]).setValueSymmetrically(i, j, value);
}
}
}
}
}
}
@@ -0,0 +1,12 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: afryca.consensusmodel.palomares2014WF;singleton:=tr
ue
Bundle-Version: 1.0.0.202101221157
Bundle-Vendor: %Bundle-Vendor
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Require-Bundle: afryca.consensusmodel
Automatic-Module-Name: afryca.consensusmodel.palomares2014WF
@@ -0,0 +1,4 @@
#Fri Jan 22 13:01:34 CET 2021
artifact.main=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.palomares2014WF\\target\\afryca.consensusmodel.palomares2014WF-1.0.0-SNAPSHOT.jar
artifact.attached.p2artifacts=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.palomares2014WF\\target\\p2artifacts.xml
artifact.attached.p2metadata=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.palomares2014WF\\target\\p2content.xml
@@ -0,0 +1,3 @@
artifactId=afryca.consensusmodel.palomares2014WF
groupId=afryca.group
version=1.0.0-SNAPSHOT
@@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<?artifactRepository version='1.1.0'?>
<artifacts size='1'>
<artifact classifier='osgi.bundle' id='afryca.consensusmodel.palomares2014WF' version='1.0.0.202101221157'>
<properties size='5'>
<property name='artifact.size' value='8972'/>
<property name='download.size' value='8972'/>
<property name='maven-groupId' value='afryca.group'/>
<property name='maven-artifactId' value='afryca.consensusmodel.palomares2014WF'/>
<property name='maven-version' value='1.0.0-SNAPSHOT'/>
</properties>
</artifact>
</artifacts>
@@ -0,0 +1,48 @@
<?xml version='1.0' encoding='UTF-8'?>
<units size='1'>
<unit id='afryca.consensusmodel.palomares2014WF' version='1.0.0.202101221157' generation='2'>
<update id='afryca.consensusmodel.palomares2014WF' range='[0.0.0,1.0.0.202101221157)' severity='0'/>
<properties size='9'>
<property name='es.Bundle-Name' value='Palomares2011'/>
<property name='es.Bundle-Vendor' value='Sinbad²'/>
<property name='df_LT.Bundle-Name' value='Palomares2011'/>
<property name='df_LT.Bundle-Vendor' value='Sinbad²'/>
<property name='org.eclipse.equinox.p2.name' value='%Bundle-Name'/>
<property name='org.eclipse.equinox.p2.provider' value='%Bundle-Vendor'/>
<property name='maven-groupId' value='afryca.group'/>
<property name='maven-artifactId' value='afryca.consensusmodel.palomares2014WF'/>
<property name='maven-version' value='1.0.0-SNAPSHOT'/>
</properties>
<provides size='6'>
<provided namespace='org.eclipse.equinox.p2.iu' name='afryca.consensusmodel.palomares2014WF' version='1.0.0.202101221157'/>
<provided namespace='osgi.bundle' name='afryca.consensusmodel.palomares2014WF' version='1.0.0.202101221157'/>
<provided namespace='osgi.identity' name='afryca.consensusmodel.palomares2014WF' version='1.0.0.202101221157'>
<properties size='1'>
<property name='type' value='osgi.bundle'/>
</properties>
</provided>
<provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
<provided namespace='org.eclipse.equinox.p2.localization' name='es' version='1.0.0'/>
<provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
</provides>
<requires size='2'>
<required namespace='osgi.bundle' name='afryca.consensusmodel' range='0.0.0'/>
<requiredProperties namespace='osgi.ee' match='(&amp;(osgi.ee=JavaSE)(version=1.8))'>
<description>
afryca.consensusmodel.palomares2014WF
</description>
</requiredProperties>
</requires>
<artifacts size='1'>
<artifact classifier='osgi.bundle' id='afryca.consensusmodel.palomares2014WF' version='1.0.0.202101221157'/>
</artifacts>
<touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
<touchpointData size='1'>
<instructions size='1'>
<instruction key='manifest'>
Bundle-SymbolicName: afryca.consensusmodel.palomares2014WF;singleton:=true&#xA;Bundle-Version: 1.0.0.202101221157&#xA;
</instruction>
</instructions>
</touchpointData>
</unit>
</units>