diff --git a/src/main/java/avatartranslator/AvatarAttribute.java b/src/main/java/avatartranslator/AvatarAttribute.java
index 2bc7c2f551eead73597a84cbeaec077271d2b109..de1c97c7dc58771e8d5cfb92eb7a8dce24aa41d9 100644
--- a/src/main/java/avatartranslator/AvatarAttribute.java
+++ b/src/main/java/avatartranslator/AvatarAttribute.java
@@ -71,6 +71,7 @@ public class AvatarAttribute extends AvatarLeftHand implements NameChecker.NameS
     public AvatarStateMachineOwner getBlock() {
         return this.block;
     }
+    public void setType(AvatarType _type) { type = _type; }
 
     public void setInitialValue(String _initialValue) {
         initialValue = _initialValue;
@@ -92,6 +93,11 @@ public class AvatarAttribute extends AvatarLeftHand implements NameChecker.NameS
         return initialValue;
     }
 
+    public String getProvidedInitialValue() {
+        if (initialValue == null) return "";
+        return initialValue;
+    }
+
     public AvatarDataType getDataType() {
         return dataType;
     }
diff --git a/src/main/java/avatartranslator/AvatarDataTypePrimitiveFields.java b/src/main/java/avatartranslator/AvatarDataTypePrimitiveFields.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f09385ad4e824c10fcb6401613d962918eb1b78
--- /dev/null
+++ b/src/main/java/avatartranslator/AvatarDataTypePrimitiveFields.java
@@ -0,0 +1,167 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Class AvatarDataTypePrimitiveFields: sequence of primitive fields that characterizes a datatype.
+ *
+ * Such datatype extension can only be produced through the buildMap method that takes a list
+ * of datatype as input and unroll the nested ones to build the lists of primitive fields.
+ * The result is a map that links each datatype with its extension.
+ *
+ * Creation: 20/06/2024
+ * @version 1.0 20/06/2024
+ * @author Sophie Coudert
+ */
+public class AvatarDataTypePrimitiveFields {
+    private List<AvatarAttribute> fields;
+
+    private AvatarDataTypePrimitiveFields() {
+        fields = new ArrayList<AvatarAttribute>();
+    }
+
+    public int size() { return fields.size(); }
+
+    private boolean addField (String name, AvatarType type) {
+        if(name == null || type == null) return false;
+        for(AvatarAttribute f : fields) if (f.getName().equals(name)) return false;
+        fields.add(new AvatarAttribute(name, type, null, null));
+        return true;
+    }
+
+    public List<AvatarAttribute> getFields() { return fields; }
+
+    public String getName(int i) { return fields.get(i).getName(); }
+
+    public AvatarType getType(int i) { return fields.get(i).getType(); }
+
+
+    /**  unroll the nested datatype among the one provided as input to build the lists of primitive fields associated
+     * to each datatype.
+     * The returned result is a map that links each datatype with its primitive fields extension.
+     */
+    public static HashMap<AvatarDataType, AvatarDataTypePrimitiveFields> buildMap(List<AvatarDataType> dtList, List<String> err) {
+        HashMap<AvatarDataType, AvatarDataTypePrimitiveFields> map = new HashMap<AvatarDataType, AvatarDataTypePrimitiveFields>();
+        for(AvatarDataType dt : dtList) buildPrimitiveFields(dt, map, new ArrayList<AvatarAttribute>(), err);
+        return map;
+    }
+
+    // IMPLEMENTATION
+
+    /**
+     * unroll the fields of datatype dt to build its associated list of primitive fields.
+     * @param dt the datatype to unroll
+     * @param map the mapping of datatypes to their unrolled version, i.e. primitive fields
+     * @param l the list of containing datatype fields (ancestors when unrolling). Technical: to detect recursive datatypes.
+     * @param err to put encountered errors.
+     */
+    private static void buildPrimitiveFields (AvatarDataType dt, HashMap<AvatarDataType, AvatarDataTypePrimitiveFields> map,
+                                       List<AvatarAttribute> l, List<String> err) {
+
+        if (map.get(dt) != null) return; // the job is already done (function may be called directly or recursively for nested datatype)
+
+        AvatarDataTypePrimitiveFields primitiveFields = new AvatarDataTypePrimitiveFields(); // create primitive-field-list structure
+
+        AvatarAttribute aa; // to iterate on datatype original fields
+        int size = dt.attributeNb();
+        for(int i = 0; i < size; i++) { // iterate: keep primitive-typed and extend datatype-typed (nested -> recursive call)
+            aa = dt.getAttributes().get(i);
+            if (aa.getType() == AvatarType.INTEGER) // atomic primitive : keep unchanged
+                primitiveFields.addField(aa.getName(), AvatarType.INTEGER);
+            else if (aa.getType() == AvatarType.BOOLEAN)  // atomic primitive : keep unchanged
+                primitiveFields.addField(aa.getName(), AvatarType.BOOLEAN);
+            else if (aa.getType() == AvatarType.TIMER) { // forbidden
+                if (err != null) err.add("type timer unauthorized for field " + aa.getName() + " in datatype " + dt.getName() +
+                        "(set to integer)");
+                // recover
+                primitiveFields.addField(aa.getName(), AvatarType.INTEGER);
+            }
+            else { // datatype
+                AvatarDataType adt = aa.getDataType();
+                // verify that datatype is well-defined
+                if (adt == null) {
+                    if (err != null) err.add("type of field " + aa.getName() + " in datatype " + dt.getName() + " is undefined (set to integer)");
+                    primitiveFields.addField(aa.getName(), AvatarType.INTEGER);
+                    continue;
+                }
+                // detect recursive datatype
+                int bug;
+                int len = l.size();
+                for(bug = 0; bug < len; bug++) { // search datatype in ancestor fields types
+                    if (l.get(bug).getDataType() == adt) break;
+                }
+                if (bug != len) { // datatype found => error: recursive datatypes not allowed
+
+                    // builds the textual representation of the detected cycle to provide a precise error message
+                    StringBuffer path = new StringBuffer();
+                    bug++;
+                    int endpath = l.size();
+                    while(bug < endpath)  { path.append(l.get(bug).getName() + "."); bug++; }
+                    path.append(aa.getName());
+
+                    // register error message
+                    if (err != null) err.add("datatype " + adt.getName() + " is recursive through field " + path.toString() + " (set to integer)");
+
+                    // recover by breaking the cycle
+                    primitiveFields.addField(aa.getName(), AvatarType.INTEGER);
+                    continue;
+                }
+
+                // unrolling nested datatype
+
+                l.add(aa); // update ancestor list before a nested call
+                buildPrimitiveFields(adt, map, l, err); // nested call to build adt's primitive fields (if not already done).
+                l.remove(l.size() - 1); // restore ancestor list after a nested call
+
+                // extend aa w.r.t adt's primitive fields
+                AvatarDataTypePrimitiveFields fields = map.get(adt);
+                for (int j = 0; j < fields.size(); j++) {
+                    primitiveFields.addField(aa.getName() + "__" + fields.getName(j), fields.getType(j));
+                }
+            }
+        }
+        // register the new "datatype -> primitive-fields" link.
+        map.put(dt, primitiveFields);
+    }
+}
+
diff --git a/src/main/java/avatartranslator/AvatarQueryOnSignal.java b/src/main/java/avatartranslator/AvatarQueryOnSignal.java
index 321b1790d0d0b30dd3567e7ff5d508e52e8acd4a..b2504d82dafa245788be4e7371743c4d748439b0 100644
--- a/src/main/java/avatartranslator/AvatarQueryOnSignal.java
+++ b/src/main/java/avatartranslator/AvatarQueryOnSignal.java
@@ -91,7 +91,7 @@ public class AvatarQueryOnSignal extends AvatarStateMachineElement {
 
     public String getExtendedName() {
     	if ((getSignal() == null) || (getAttribute() == null)) {
-    		String s = getName() + " refobjt=" + referenceObject.toString();
+    		String s = getName() + " refobjt=" + referenceObject;
     		TraceManager.addDev("Null signal" + " res=" + s);
     		return s;
     	}
diff --git a/src/main/java/avatartranslator/AvatarSpecification.java b/src/main/java/avatartranslator/AvatarSpecification.java
index a5954b2217c2faca6cd4fea78dff6fdf9f4e3e23..5eff2ba1aea028c9b219d8d4f6fbbab3b0256fef 100644
--- a/src/main/java/avatartranslator/AvatarSpecification.java
+++ b/src/main/java/avatartranslator/AvatarSpecification.java
@@ -37,7 +37,7 @@
  */
 
 package avatartranslator;
-
+import avatartranslator.tosysmlv2.*;
 import avatartranslator.intboolsolver.AvatarIBSolver;
 import common.CanBeTagged;
 import common.Tag;
@@ -1777,8 +1777,8 @@ public class AvatarSpecification extends AvatarElement implements IBSParamSpec {
 
     // SysML V2
     public static AvatarSpecification makeFromSysMLV2(String pathToFile) {
-        AvatarSpecification as = new AvatarSpecification(pathToFile, null);
-        return as;
+        AvatarFromSysML builder = new AvatarFromSysML();
+        return builder.sysMLtoSpec(pathToFile);
     }
 
     public List<String> getExtraTypes() {
diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
index 6cc9ca3dcad44d85fa00bfe1dcfbbdd90c917516..351d5c44a6ba4265e89503900d64388e55f6c7d8 100644
--- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java
+++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
@@ -569,22 +569,24 @@ public class AvatarSyntaxChecker {
                                     error.firstAvatarElement = aaos;
                                     error.error = 14;
                                     errors.add(error);
-                                } else if (sig.isIn() || param.getType() == AvatarType.UNDEFINED) {
-                                    AvatarAttribute aa = block.getAvatarAttributeWithName(value);
-                                    if (aa == null) {
-                                        AvatarError error = new AvatarError(avspec);
-                                        error.block = block;
-                                        error.firstAvatarElement = aaos;
-                                        error.error = 17;
-                                        errors.add(error);
-                                    } else {
-                                        // We check the type of the two is equivalent
-                                        if (aa.getType() != param.getType()) {
+                                } else if (param.getType() == AvatarType.UNDEFINED) {
+                                    if (sig.isIn()) {
+                                        AvatarAttribute aa = block.getAvatarAttributeWithName(value);
+                                        if (aa == null) {
                                             AvatarError error = new AvatarError(avspec);
                                             error.block = block;
                                             error.firstAvatarElement = aaos;
                                             error.error = 17;
                                             errors.add(error);
+                                        } else {
+                                            // We check the type of the two is equivalent
+                                            if (aa.getType() != param.getType()) {
+                                                AvatarError error = new AvatarError(avspec);
+                                                error.block = block;
+                                                error.firstAvatarElement = aaos;
+                                                error.error = 17;
+                                                errors.add(error);
+                                            }
                                         }
                                     }
                                 } else {
diff --git a/src/main/java/avatartranslator/tosysmlv2/AVATAR2SysMLV2.java b/src/main/java/avatartranslator/tosysmlv2/AVATAR2SysMLV2.java
index 10ea1ffb830e9c2f3146a610362b0546279541c7..496227d5538ddbfcb469418a5b9ab6a5fec672b7 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AVATAR2SysMLV2.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AVATAR2SysMLV2.java
@@ -165,9 +165,9 @@ public class AVATAR2SysMLV2 {
 
         avspec.removeCompositeStates();
         avspec.removeLibraryFunctionCalls();
-        avspec.removeTimers();
+        //avspec.removeTimers();
         // Reset parser
-        AvatarIBSolver.clearAttributes();
+/*        AvatarIBSolver.clearAttributes();
 
         //TraceManager.addDev("AVATAR2CPOSIX avspec=" + avspec);
 
@@ -180,7 +180,8 @@ public class AVATAR2SysMLV2 {
 
 
        return indent(sysml);
-
+*/      Avatar2SysML newGen = new Avatar2SysML(avspec);
+        return(newGen.avatar2SysML());
     }
 
     public  boolean isExcluded(String key) {
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
new file mode 100644
index 0000000000000000000000000000000000000000..a2e58bc000ecbe5cc3bb74c799bd47eecf2f5067
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
@@ -0,0 +1,1547 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+package avatartranslator.tosysmlv2;
+
+import avatartranslator.*;
+
+import static avatartranslator.AvatarTransition.*;
+import static avatartranslator.tosysmlv2.Avatar2SysMLNames.*;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.function.BiConsumer;
+
+
+/**
+ * Class Avatar2SysMLV2
+ * Creation: 20/06/2024
+ *
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ */
+public class Avatar2SysML {
+    /** the source Avatar Specification */
+    private AvatarSpecification avspec;
+    /** the buffer in which theSysML Model is written (returned at the end of the generation process) */
+    private StringBuffer avsysml;
+    /** signals concerned by AvatarQueryOnSignal (collected at beginning because require some specific handling)*/
+    private HashSet<AvatarSignal> fifoSet = new HashSet<AvatarSignal>();
+    /** infos about methods and signals collected while generation declarations and used while generating state machines */
+    private HashMap<AvatarMethod, MethodInfo> methodMap = new HashMap<AvatarMethod, MethodInfo>();
+    /** path from top level to the block (block sequence) being currently handled */
+    private ArrayList<String> blockChain = new ArrayList<String>();
+    /** SysML code to make inner blocks visible at top level. Contains one declaration per inner block */
+    private StringBuffer blockLinks;
+    /** the standard indentation step string */
+    private final String indentStep = "    ";
+    /** size of the standard indentation step */
+    private final int indentStepSize = 4;
+    /** the current indentation string */
+    private String indentation;
+
+    /** (fixed) header for any Avatar SysML model instance */
+    private final String header = "package AvatarInstance {\n" +
+            indentStep + "private import AvatarGeneral::*;\n" +
+            indentStep + "private import AvatarBlockTypes::*;\n" +
+            indentStep + "private import AvatarCommunication::*;\n" +
+            indentStep + "private import AvatarTransitionServer::*;\n";
+
+    /** the single constructor */
+    public Avatar2SysML(AvatarSpecification _avspec) { avspec = _avspec; }
+
+    /** the generator. Builds the SysML model of the specification provided to the constructor */
+    public StringBuffer avatar2SysML() {
+        fifoSet.clear();
+        methodMap.clear();
+        blockChain.clear();
+        indentation = "";
+        blockLinks = new StringBuffer(indentStep + "// Block Shortcut Links $$$$$$$$$$$$\n");
+        avsysml = new StringBuffer(header);
+        indent(1);
+        searchCountSignals();;
+        dataTypes2SysML();
+        communications2SysML();
+        blocks2SysML();
+        avsysml.append(blockLinks);
+        avsysml.append("}\n");
+        return avsysml;
+    }
+
+    /** increase indentation */
+    private void indent(int n) { for (int i= 0; i < n; i++) indentation += indentStep; }
+    /** decrease indentation */
+    private void unindent(int n) { indentation = indentation.substring(n * indentStepSize); }
+
+    /** infos collected while generating declarations of methods and signals, to be used later.
+     *
+     * Used when generating state machine description, for example when handling ActionsOnSignal. */
+    static private class MethodInfo {
+        private String name; // method name
+        private String msgtype; // null for methods that are not signals
+        private ArrayList<String> fieldNames; // names of parameters
+        private ArrayList<AvatarType> fieldTypes; // int, bool or undefined
+        private ArrayList<AvatarDataType> dataTypes; // datatype for "undefined" fieldType, otherwise null.
+        private AvatarType returnType; // int, bool or undefined
+        private AvatarDataType returnDataType; // datatype if returnType is "undefined", otherwise null.
+
+        /** for void methods (without return type) */
+        MethodInfo(String _name) {
+            name = _name;
+            msgtype = null;
+            fieldNames = new ArrayList<String>();
+            fieldTypes = new ArrayList<AvatarType>();
+            dataTypes = new ArrayList<AvatarDataType>();
+            returnType = null;
+            returnDataType = null;
+        }
+
+        /** for non-void methods (with return type) */
+        MethodInfo(String _name, AvatarType _returnType, AvatarDataType dt) {
+            name = _name;
+            msgtype = null;
+            fieldNames = new ArrayList<String>();
+            fieldTypes = new ArrayList<AvatarType>();
+            dataTypes = new ArrayList<AvatarDataType>();
+            returnType = _returnType;
+            if (_returnType != AvatarType.UNDEFINED)
+                returnDataType = null;
+            else
+                returnDataType = dt;
+       }
+
+       /** for signals */
+       MethodInfo(String _name, String _msgtype) {
+            name = _name;
+            msgtype = _msgtype;
+            fieldNames = new ArrayList<String>();
+            fieldTypes = new ArrayList<AvatarType>();
+            dataTypes = new ArrayList<AvatarDataType>();
+            returnType = null;
+            returnDataType = null;
+       }
+
+        /** add parameter at the end.
+         * @param _dt datatype, only relevant if _type is UNDEFINED
+         */
+        public void addField(String _fieldName, AvatarType _type, AvatarDataType _dt){
+           if (_type == AvatarType.UNDEFINED)
+               dataTypes.add(_dt);
+           else if (!(_type == AvatarType.BOOLEAN || _type == AvatarType.INTEGER))
+               return; // unknown type... TO CHANGE ? ...
+           else
+               dataTypes.add(null);
+           fieldNames.add(_fieldName);
+           fieldTypes.add(_type);
+        }
+
+        /** number of parameters */
+        public int getArity() { return fieldNames.size(); }
+
+        /** SysML name */
+        public String getName(){ return name; }
+
+        /** SysML name for message type describing profile */
+        public String getMessageType(){ return msgtype; }
+
+        /** method Avatar return type (null if none)*/
+        public AvatarType getReturnType(){ return returnType; }
+
+        /** method Avatar return datatype (null if no return type or return primitive type)*/
+        public AvatarDataType getReturnDataType(){ return returnDataType; }
+
+        /** ith parameter SysML name */
+        public String getFieldName(int i){ return fieldNames.get(i); }
+
+        /** ith parameter Avatar type */
+        public AvatarType getFieldType(int i){ return fieldTypes.get(i); }
+
+        /** ith parameter Avatar datatype (null if primitive type)*/
+        public AvatarDataType getDataType(int i){ return dataTypes.get(i); }
+    }
+
+    /**
+     * Memorized while naming states, to be reused for generating states
+     */
+    static private class StateInfo {
+        /** SysML name */
+        private String name;
+
+        /** Sysml name of the state that is technically added before this (if exists) */
+        private String prename = "";
+
+        /** for states that havn't technically added state before them
+         * @param _name SysML name
+         */
+        StateInfo(String _name) {
+            name = _name;
+        }
+
+        /** for states that have a technically added state before them
+         * @param _name SysML name of the state
+         * @param _prename SysML name of the technically added state before
+         */
+        StateInfo(String _name, String _prename) { name = _name; prename = _prename; }
+
+        /** SysML name of the state */
+        public String getName(){ return name; }
+
+        /** SysML name of the technically added state before */
+        public String getPreName(){ return prename; }
+    }
+
+    /** Collect (in fifoSet) all signals that are used in an AvatarQueryOnSignal element of the specification.
+     *
+     * (they require some specific handling while generating...)
+     */
+    private void searchCountSignals() {
+        for(AvatarBlock block: avspec.getListOfBlocks()) {
+            for(AvatarStateMachineElement sme : block.getStateMachine().getListOfElements()) {
+                    if(sme instanceof AvatarQueryOnSignal)
+                        fifoSet.add(((AvatarQueryOnSignal) sme).getSignal());
+            }
+        }
+    }
+
+    /** update path blockChain when entering the block-handling procedure for a a block / sub-block
+     * @param _block: the block /sub-block to handle
+     */
+    private void chainBlock(String _block) { blockChain.add(_block); }
+
+    /** update path blockChain when exiting the block-handling procedure for a a block / sub-block */
+    private void unchainBlock() { if(blockChain.size() > 0) blockChain.remove(blockChain.size() - 1); }
+
+    /** generate SysML code to make a block visible at top level through its name (and not its path).
+     *
+     * Links block name to block path (updates blockLinks which is added to avsysml at the end of
+     * the generation process). Consistent because all blocks have different names.
+     */
+    private void blocklink() {
+        int size = blockChain.size();
+        if (size < 2) return;
+        StringBuffer chain = new StringBuffer();
+        for (int i=0; i < size-1; i++){
+            chain.append(blockChain.get(i) + ".");
+        }
+        chain.append(blockChain.get(size - 1));
+        blockLinks.append( indentStep + "part " + blockChain.get(size - 1) +
+                " : '#AvatarBlock' :> " + chain.toString() + " = " + chain.toString() + ";\n" );
+    }
+
+    /** generates SysML datatype declarations and put them at the current position (end) of avsysml */
+    private void dataTypes2SysML(){
+        if (avspec.getDataTypes() == null || avspec.getDataTypes().size() == 0) return;
+        avsysml.append("\n" + indentation + "// DATATYPES $$$$$$$$$$$$$$$$$$$$$$$$\n");
+        for(AvatarDataType dt : avspec.getDataTypes()){
+            // put Header
+            avsysml.append("\n" + indentation + "attribute def " + dataTypeSysMLname(dt.getName()) + " :> '#AvatarDataType'");
+            // handle fields
+            int nbFields = dt.attributeNb();
+            if (nbFields == 0)
+                avsysml.append(";\n");
+            else { // put fields.
+                   // Note: SysML has no default values thus default values are explicitely set
+                avsysml.append(" { \n");
+                indent(1);
+                for (int i = 0; i < nbFields; i++) {
+                    AvatarAttribute aa = dt.getAttribute(i);
+                    avsysml.append( indentation + "attribute " + fieldSysMLname(aa.getName()) + " : " );
+                    if (aa.getType() == AvatarType.BOOLEAN) {
+                        avsysml.append("Boolean");
+                        if (aa.hasInitialValue())
+                            avsysml.append(" := " + aa.getInitialValue().trim() + ";\n");
+                        else
+                            avsysml.append(" default := " + AvatarType.BOOLEAN.getDefaultInitialValue().trim() + ";\n");
+                    }
+                    else if (aa.getType() == AvatarType.INTEGER) {
+                        avsysml.append("Integer");
+                         if (aa.hasInitialValue())
+                            avsysml.append(" := " + aa.getInitialValue().trim() + ";\n");
+                        else
+                            avsysml.append(" default := " + AvatarType.INTEGER.getDefaultInitialValue().trim() + ";\n");
+                    }
+                    else
+                        avsysml.append(aa.getDataType().getName() + ";\n"); // datatypes don't have default values
+                }
+                unindent(1);
+                avsysml.append(indentation + "}\n");
+            }
+        }
+    }
+    /** generates SysML declarations of communication structures and put them at the current position (end) of avsysml.
+     *
+     * Communication structures are
+     * <ul>
+     *     <li> Relations, corresponding to Avatar relations </li>
+     *     <li> Channels declarations (a channel is an inSignal/outSignal connection inside a relation) </li>
+     *     <li> Binding of block signals to channels, to complete channel's characterization </li>
+     *     <li> in/out Messages (structures) declarations, linking them to channels. This providing signals with profiles </li>
+     * </ul>
+     */
+    private void communications2SysML(){
+        int nbfiforelNumber = 0;
+        int bfiforelNumber = 0;
+        int syncrelNumber = 0;
+
+        if (avspec.getRelations() == null || avspec.getRelations().size() == 0) return;
+
+        avsysml.append("\n" + indentation + "// COMMUNICATIONS $$$$$$$$$$$$$$$$$$$$$$$$\n");
+        for(AvatarRelation ar: avspec.getRelations()) {
+
+            // declare some parameters depending on relation type ==============
+            int relationType; // SYNC, FIFO or BFIFO
+            int relationNumber; // to distinguish relations with same characteristics
+            String relationConstructor; // #Sync_Rel, #Bfifo_Rel, #NBfifo_Rel (c.f. Avatar SysML library)
+            String relationParameters; // for the call of SysML constructors of relation parts
+            String channelConstructor; // #Sync, #Bfifo, #NBfifo (c.f. Avatar SysML library)
+
+            // compute parameters depending on relation type ==============
+            // if (ar.isAMS()) ... TODO
+            String blk1 = ar.getBlock1().getName();
+            String blk2 = ar.getBlock2().getName();
+            String blk1SysMLname = blockSysMLname(blk1);
+            String blk2SysMLname = blockSysMLname(blk2);
+            relationParameters = "('@block1' = " + blk1SysMLname + ", '@block2' = " + blk2SysMLname;
+            if (! ar.isAsynchronous()) { // sync relation
+                relationType = SYNC;
+                relationNumber = syncrelNumber++;
+                relationConstructor = "'#Sync_Rel'";
+                channelConstructor = "'#Sync'";
+                if(ar.isPrivate()) relationParameters += ", '@private'=true)"; // default is false in Avatar SysML library
+            }
+            else { // fifo relation
+                if(ar.isPrivate()) // default: false in Avatar SysML library
+                    if(ar.isLossy()) // default: false in Avatar SysML library
+                        if(ar.getSizeOfFIFO() > 1) // default size: 1 in Avatar SysML library
+                            relationParameters += ", '@private'=true, '@lossy'=true, '@max_size'=" + ar.getSizeOfFIFO() + ")";
+                        else
+                            relationParameters += ", '@private'=true, '@lossy'=true)";
+                    else
+                        if(ar.getSizeOfFIFO() > 1) // default size: 1 in Avatar SysML library
+                            relationParameters += ", '@private'=true, '@max_size'=" + ar.getSizeOfFIFO() + ")";
+                        else
+                            relationParameters += ", '@private'=true)";
+                else
+                    if(ar.isLossy()) // default: false in Avatar SysML library
+                        if(ar.getSizeOfFIFO() > 1) // default size: 1 in Avatar SysML library
+                            relationParameters += ", '@lossy'=true, '@max_size'=" + ar.getSizeOfFIFO() + ")";
+                        else
+                            relationParameters += ", '@lossy'=true)";
+                    else
+                        if(ar.getSizeOfFIFO() > 1) // default size: 1 in Avatar SysML library
+                            relationParameters += ", '@max_size'=" + ar.getSizeOfFIFO() + ")";
+
+                if (ar.isBlocking()) { // blocking fifo relation
+                    relationType = BFIFO;
+                    relationNumber = bfiforelNumber++;
+                    relationConstructor = "'#Bfifo_Rel'";
+                    channelConstructor = "'#Bfifo'";
+                }
+                else { // non blocking fifo relation
+                    relationType = NBFIFO;
+                    relationNumber = nbfiforelNumber++;
+                    relationConstructor = "'#NBfifo_Rel'";
+                    channelConstructor = "'#NBfifo'";
+                }
+            }
+
+            // general generation (using parameters above) : put declaration to avsysml ==============
+
+            String relationSYSMLname = relationSysMLname(blk1, blk2, relationType, relationNumber);
+
+            // relation declaration --------------------
+
+            avsysml.append("\n" + indentation + "// Relation " + relationSYSMLname + "=============\n");
+            avsysml.append(indentation + "part " +  relationSYSMLname + ": " + relationConstructor);
+            if(relationParameters != null)
+                 avsysml.append(" = " + relationConstructor + relationParameters);
+            avsysml.append(";\n");
+
+            // Channels and associated Messages declarations ----------------
+
+            int relationSize = ar.getSignals1().size();
+            for(int i=0; i<relationSize; i++) { // iterate on signal connections
+                AvatarSignal sig1 = ar.getSignals1().get(i);
+                AvatarSignal sig2 = ar.getSignals2().get(i);
+                boolean out2in = (sig1.getInOut() == AvatarSignal.OUT);
+
+                String channelSYSMLname = channelSysMLname(channelName(blk1, blk2, sig1.getName(), sig2.getName(), out2in), relationType);
+                String sig1SYSMLname = signalSysMLname(sig1.getName());
+                String sig2SYSMLname = signalSysMLname(sig2.getName());
+                String message1SYSMLname = messageSysMLname(blk1,sig1.getName());
+                String message2SYSMLname = messageSysMLname(blk2,sig2.getName());
+                MethodInfo sig1Info = new MethodInfo(sig1SYSMLname, message1SYSMLname); // to collect info
+                MethodInfo sig2Info = new MethodInfo(sig2SYSMLname, message2SYSMLname); // to collect info
+
+                // Channel declaration .........................
+
+                avsysml.append("\n" + indentation + "// Channel " + channelSYSMLname + "-------------\n");
+                avsysml.append(indentation + "part " + channelSYSMLname + " : " + channelConstructor + " = "
+                        + channelConstructor + "('@relation' = " + relationSYSMLname + ");\n");
+
+                // Binding block signals to the channel ................
+
+                if (out2in) { // depends on direction. symetric.
+                    avsysml.append(indentation + "binding : '#OutSignalBinding' bind " + blk1SysMLname + "." + sig1SYSMLname + " = " + channelSYSMLname +
+                            ";\n");
+                    avsysml.append(indentation + "binding : '#InSignalBinding' bind " + blk2SysMLname + "." + sig2SYSMLname + " = " + channelSYSMLname +
+                            ";\n");
+                } else {
+                    avsysml.append(indentation + "binding : '#InSignalBinding' bind " + blk1SysMLname + "." + sig1SYSMLname + " = " + channelSYSMLname + ";\n");
+                    avsysml.append(indentation + "binding : '#OutSignalBinding' bind " + blk2SysMLname + "." + sig2SYSMLname + " = " + channelSYSMLname + ";\n");
+                }
+
+                // Message declarations .........................
+                // one Message per direction, parallel build in two buffers msg1Buf and msg2Buf
+
+                // put declaration headers
+                StringBuffer msg1Buf = new StringBuffer(indentation + "\n// Message of signal " + blk1SysMLname + "." + sig1SYSMLname + "............\n");
+                StringBuffer msg2Buf = new StringBuffer(indentation + "\n// Message of signal " + blk2SysMLname  + "." + sig2SYSMLname + "............\n");
+                if (out2in) {
+                    msg1Buf.append(indentation + "part def " + message1SYSMLname + " :> '#OutMessage', " + message2SYSMLname + " {\n");
+                    msg2Buf.append(indentation + "part def " + message2SYSMLname + " :> '#InMessage' {\n" +
+                            indentation + indentStep + "private part '@channel' : '#Channel' = " + channelSYSMLname + ";\n");
+                } else {
+                    msg1Buf.append(indentation + "part def " + message1SYSMLname + " :> '#InMessage' {\n" +
+                            indentation + indentStep + "private part '@channel' : '#Channel' = " + channelSYSMLname + ";\n");
+                    msg2Buf.append(indentation + "part def " + message2SYSMLname + " :> '#OutMessage', " + message1SYSMLname +  " {\n");
+                }
+                indent(1);
+
+                // handle message fields. in-message fields redefine out-message fields
+                int nbFields = sig1.getListOfOriginalAttributes().size();
+                // parameters for handling a field
+                AvatarType type;
+                String attributeType; // SysML name associated to type
+                String fieldName1;
+                String fieldName2;
+                int j=0;
+                while (j < nbFields ) { // browse channels' fielsd
+                    AvatarAttribute aa1 = sig1.getListOfOriginalAttributes().get(j);
+
+                    // compute parameters for handling this field
+
+                    // compute field type parameters
+                    AvatarDataType dataType = null;
+                    if (aa1.isDataType()) {
+                        dataType = aa1.getDataType();
+                        attributeType = dataTypeSysMLname(dataType.getName()) + ";\n";
+                        type = AvatarType.UNDEFINED;
+                    }
+                    else if (aa1.isBool()) {
+                        attributeType = "Boolean;\n";
+                        type = AvatarType.BOOLEAN;
+                    }
+                    else if (aa1.isInt()) {
+                        attributeType = "Integer;\n";
+                        type = AvatarType.INTEGER;
+                    } else { attributeType = "Integer;\n"; type = AvatarType.INTEGER; } // TODO : error: SHOULD NOT BE TIMER
+
+                    // compute field names
+                    fieldName1 = fieldSysMLname(aa1.getName());
+                    fieldName2 = fieldSysMLname(sig2.getListOfOriginalAttributes().get(j).getName());
+
+                    // put field declaration
+                    if (out2in) { // depends on direction. symetric.
+                        msg1Buf.append(indentation + "attribute " + fieldName1 + " redefines " + fieldName2 + ";\n");
+                        msg2Buf.append(indentation + "attribute " + fieldName2 + " : " + attributeType);
+                    } else {
+                        msg1Buf.append(indentation + "attribute " + fieldName1 + " : " + attributeType);
+                        msg2Buf.append(indentation + "attribute " + fieldName2 + " redefines " + fieldName1 + ";\n");
+                    }
+
+                    // collect info to be used later
+                    sig1Info.addField(fieldName1, type, dataType);
+                    sig2Info.addField(fieldName2, type, dataType);
+
+                    j++;
+                }
+                unindent(1);
+                msg1Buf.append(indentation + "}\n");
+                msg2Buf.append(indentation + "}\n");
+
+                // put declarations to avsysml
+                if (out2in) { // order only relevant for the aesthetics
+                    avsysml.append(msg2Buf);
+                    avsysml.append(msg1Buf);
+                } else {
+                    avsysml.append(msg1Buf);
+                    avsysml.append(msg2Buf);
+                }
+
+                // memorize collected info
+                methodMap.put(sig1,sig1Info);
+                methodMap.put(sig2,sig2Info);
+            }
+        }
+    }
+    /** generates SysML declarations for block methods.
+     * To be called while generating block declarations. Directly put generated text in avsysml.
+     */
+    private void method2SysML(AvatarMethod am){
+
+        MethodInfo methodInfo; // to collect info
+
+        // compute return type (null for void methods)....................
+
+        String returnType; // SysML name of return type, or null
+        List<AvatarAttribute> returns = am.getListOfOriginalReturnAttributes(); // size must be <= 1
+        if(returns.size() == 0) { // void method
+            returnType = null;
+            methodInfo = new MethodInfo(methodSysMLname(am.getName()));
+        }
+        else {
+            if (returns.get(0).isDataType()) {
+                AvatarDataType returnDataType = returns.get(0).getDataType();
+                returnType = dataTypeSysMLname(returns.get(0).getDataType().getName());
+                methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarType.UNDEFINED, returnDataType);
+
+            }
+            else if (returns.get(0).isBool()) {
+                    returnType = "Boolean";
+                    methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarType.BOOLEAN, null);
+            } else if (returns.get(0).isInt()) {
+                    returnType = "Integer";
+                    methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarType.INTEGER, null);
+            } else { // ERROR : TIMER, should not happen
+                    returnType = "Integer";
+                    methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarType.INTEGER, null);
+            }
+        }
+
+        // put header (different for void and non-void methods).....................
+
+        if (returnType == null)
+            avsysml.append(indentation + "action " + methodSysMLname(am.getName()) +  ": '#AvatarVoidMethod'");
+        else
+            avsysml.append(indentation + "calc " + methodSysMLname(am.getName()) +  ": '#AvatarCalcMethod'");
+
+        // put parameters and return type as fields .......................
+        // collect corresponding info
+
+        int nbFields = am.getListOfOriginalAttributes().size();
+        if (nbFields == 0 && returnType == null)
+            avsysml.append(";\n");
+        else {
+            avsysml.append(" {\n");
+            indent(1);
+
+            int j = 0;
+            // iterate on method parameters, put corresponding fields
+            while (j < nbFields) {
+                AvatarAttribute aa = am.getListOfOriginalAttributes().get(j);
+                if (aa.isDataType()) {
+                    avsysml.append(indentation + "attribute " + fieldSysMLname(aa.getName())
+                            + " : " + dataTypeSysMLname(aa.getDataType().getName()) + ";\n");
+                    methodInfo.addField(fieldSysMLname(aa.getName()), AvatarType.UNDEFINED, aa.getDataType());
+                } else if (aa.isInt()) {
+                    avsysml.append(indentation + "attribute " + fieldSysMLname(aa.getName()) + " : Integer;\n");
+                    methodInfo.addField(fieldSysMLname(aa.getName()), AvatarType.INTEGER, null);
+                } else if (aa.isBool()) {
+                    avsysml.append(indentation + "attribute " + fieldSysMLname(aa.getName()) + " : Boolean;\n");
+                    methodInfo.addField(fieldSysMLname(aa.getName()), AvatarType.BOOLEAN, null);
+                } else { // ERROR should not happen
+                    avsysml.append(indentation + "attribute " + fieldSysMLname(aa.getName()) + " : Integer;\n");
+                    methodInfo.addField(fieldSysMLname(aa.getName()), AvatarType.INTEGER, null);
+                }
+                j++;
+            }
+            // put return field for non-void methods
+            if (returnType != null)
+                avsysml.append(indentation + "return : " + returnType + ";\n");
+
+            unindent(1);
+            avsysml.append(indentation + "}\n");
+        }
+        methodMap.put(am, methodInfo); // memorize collected info
+    }
+
+    /** generates SysML declarations for block signals.
+     * To be called while generating block declarations. Directly put generated text in avsysml. Signals used in AvatarQueryOnSignal elements must
+     * be typed as fifos (other ones are not constrained). Thus, fifoSet must have been computed before calling this method.
+     */
+    private void signal2SysML(AvatarSignal as){
+        avsysml.append(indentation + "part " + methodMap.get(as).getName() + " : " +
+                (fifoSet.contains(as) ? "'#Fifo'" : "'#Channel'") + ";\n");
+    }
+
+    /** generates SysML declarations for all blocks: iterate on specification block list */
+    private void blocks2SysML(){
+        avsysml.append("\n" + indentation + "// BLOCKS $$$$$$$$$$$$$$$$$$$$$$$$\n");
+        for(AvatarBlock block: avspec.getListOfBlocks())
+            if (block.getFather() == null) block2SysML(block);
+    }
+
+    /** generates SysML declarations for a blocks and direct access to inner blocks through their name (not their full path) */
+    private void block2SysML(AvatarBlock block){
+        String blockSYSMLname = blockSysMLname(block.getName());
+        // to memorize timers while iterating on attributes (delayed declarations)
+        ArrayList<AvatarAttribute> timerList = new ArrayList<AvatarAttribute>();
+        chainBlock(blockSYSMLname);
+        blocklink(); // to directly access inner blocks through their (short) name
+
+        // put block header --------------------
+        avsysml.append("\n" + indentation + "// Block " + blockSYSMLname + "=============\n");
+        avsysml.append(indentation + "part " + blockSYSMLname + " : '#AvatarBlock' {\n");
+        indent(1);
+
+        // put attribute declarations ----------------------------
+        // no default value in SysML, thus default values are set explicitly
+        // timer attributes are memorized to be declared later
+
+        if (block.getAttributes() != null && block.getAttributes().size() != 0) {
+            avsysml.append("\n" + indentation + "// Attributes ---------------------\n");
+            int j = 0;
+            int nbAttributes = block.getOriginalAttributes().size();
+            while(j < nbAttributes)  { // iterate on block's attributes
+                AvatarAttribute aa = block.getOriginalAttributes().get(j);
+                if (aa.isDataType()) {
+                    avsysml.append(indentation + "attribute " + attributeSysMLname(aa.getName()) +
+                            " : " + dataTypeSysMLname(aa.getDataType().getName()) + ";\n");
+                }
+                else if (aa.isInt()) {
+                    avsysml.append(indentation + "attribute " + attributeSysMLname(aa.getName()) + " : Integer");
+                    if (aa.hasInitialValue())
+                        avsysml.append(" := " + aa.getInitialValue().trim());
+                    else
+                        avsysml.append(" default := " + AvatarType.INTEGER.getDefaultInitialValue().trim());
+                    avsysml.append(";\n");
+                }
+                else if (aa.isBool()) {
+                    avsysml.append(indentation + "attribute " + attributeSysMLname(aa.getName()) + " : Boolean");
+                    if (aa.hasInitialValue())
+                        avsysml.append(" := " + aa.getInitialValue().trim());
+                    else
+                        avsysml.append(" default := " + AvatarType.BOOLEAN.getDefaultInitialValue().trim());
+                    avsysml.append(";\n");
+                }
+                else if (aa.isTimer()) {
+                    timerList.add(aa);
+                } else {} // TODO : should not happen. to remove if not possible
+                j++;
+            }
+        }
+
+        // put constant declarations --------------------
+        if (block.getConstants() != null && block.getConstants().size() != 0) {
+            avsysml.append("\n" + indentation + "// Constants ---------------------\n");
+            int j = 0;
+            int nbConstants = block.getConstants().size();
+            while(j < nbConstants)  { // iterate on block's constants
+                AvatarAttribute aa = block.getOriginalAttributes().get(j);
+                if (aa.isDataType()) {
+                    avsysml.append(indentation + "readolny attribute " + attributeSysMLname(aa.getName()) +
+                            " : " + dataTypeSysMLname(aa.getDataType().getName()) + ";\n");
+                }
+                else if (aa.isInt()) {
+                    avsysml.append(indentation + "readolny attribute " + attributeSysMLname(aa.getName()) + " : Integer");
+                    if (aa.hasInitialValue())
+                        avsysml.append(" := " + aa.getInitialValue().trim());
+                    else
+                        avsysml.append(" default := " + AvatarType.INTEGER.getDefaultInitialValue().trim());
+                    avsysml.append(";\n");
+                }
+                else if (aa.isBool()) {
+                    avsysml.append(indentation + "readolny attribute " + attributeSysMLname(aa.getName()) + " : Boolean");
+                    if (aa.hasInitialValue())
+                        avsysml.append(" := " + aa.getInitialValue().trim());
+                    else
+                        avsysml.append(" default := " + AvatarType.BOOLEAN.getDefaultInitialValue().trim());
+                    avsysml.append(";\n");
+                }
+                else {} // TODO ? error should not happen (timers arn't constants...)
+                j++;
+            }
+        }
+
+        // put method declarations --------------------
+        if (block.getMethods() != null && block.getMethods().size() != 0) {
+            avsysml.append("\n" + indentation + "// Methods ---------------------\n");
+            for (AvatarMethod am : block.getMethods()) method2SysML(am);
+        }
+
+        // put signal declarations --------------------
+        if (block.getSignals() != null && block.getSignals().size() != 0) {
+            avsysml.append("\n" + indentation + "// Signals ---------------------\n");
+            for (AvatarSignal as : block.getSignals()) signal2SysML(as);
+        }
+
+        // put timer declarations -------------------
+        if (timerList != null && timerList.size() != 0) {
+            avsysml.append("\n" + indentation + "// Timers ---------------------\n");
+            for (AvatarAttribute timer : timerList)
+                avsysml.append(indentation + "part " + timerBlockSysMLname(timer.getName()) + ": '#AvatarTimer' = '#AvatarTimer'();\n");
+        }
+
+        // put state-machine description --------------------
+        avsysml.append("\n" + indentation + "// state-machine -------------------\n");
+        statemachine2SysML(block.getStateMachine());
+
+        // sub-blocks -------------------
+        List<AvatarBlock> subBlockList = new ArrayList<AvatarBlock>();
+        for(AvatarBlock blk: avspec.getListOfBlocks()) { if (blk.getFather() == block) subBlockList.add(blk); }
+        if (subBlockList.size() != 0) {
+            avsysml.append("\n" + indentation + "// Sub-Blocks øøøøøøøøøøøøøøøøøøøøøøø\n");
+            for (AvatarBlock blk : subBlockList) block2SysML(blk);
+        }
+
+        unindent(1);
+        avsysml.append(indentation + "}\n");
+        unchainBlock();
+    }
+
+
+    /** generates state information for each state machine element of the specification and technically
+     * added states (before some communication elements). Put this information in a map which is returned.
+     */
+    private HashMap<AvatarStateMachineElement, StateInfo> computeStateInfo(AvatarStateMachine asm) {
+
+        // the map to fill and return
+        HashMap<AvatarStateMachineElement, StateInfo> stateMap = new HashMap<AvatarStateMachineElement, StateInfo>();
+
+        // associate names to future SysML states.........................
+
+        // number to identify states in an unambigous way
+        int randomNumber = 0;
+        int countNumber = 0;
+        int sendNumber = 0;
+        int receiveNumber = 0;
+        int setNumber = 0;
+        int resetNumber = 0;
+        int expireNumber = 0;
+
+        // produces and memorize stateinfo structure (couple name, prename) for all state machine element
+        for (AvatarStateMachineElement asme : asm.getListOfElements()) {
+            StateInfo stateinfo;
+            // states without communication hav just a name.
+            if (asme instanceof AvatarStartState)
+                stateinfo = new StateInfo(startStateSysMLname());
+            else if (asme instanceof AvatarStopState)
+                stateinfo = new StateInfo(stopStateSysMLname());
+            else if (asme instanceof AvatarState)
+                stateinfo = new StateInfo(standardStateSysMLname(asme.getName()));
+            else if (asme instanceof AvatarQueryOnSignal)
+                stateinfo = new StateInfo(countStateSysMLname(((AvatarQueryOnSignal) asme).getSignal().getName(), countNumber++));
+            else if (asme instanceof AvatarRandom)
+                stateinfo = new StateInfo(randomStateSysMLname(randomNumber++));
+                // next cases rely on communication and thus, are subject to the introduction of an additional "preceding" state.
+            else if (asme instanceof AvatarActionOnSignal) {
+                if (((AvatarActionOnSignal) asme).isSending())
+                    stateinfo = new StateInfo(
+                            sendStateSysMLname(((AvatarActionOnSignal) asme).getSignal().getName(), sendNumber),
+                            presendStateSysMLname(((AvatarActionOnSignal) asme).getSignal().getName(), sendNumber++));
+                else
+                    stateinfo = new StateInfo(receiveStateSysMLname(((AvatarActionOnSignal) asme).getSignal().getName(), receiveNumber),
+                            prereceiveStateSysMLname(((AvatarActionOnSignal) asme).getSignal().getName(), receiveNumber++));
+            } else if (asme instanceof AvatarSetTimer) {
+                stateinfo = new StateInfo(setTimerStateSysMLname(((AvatarTimerOperator) asme).getTimer().getName(), setNumber),
+                        presetTimerStateSysMLname(((AvatarTimerOperator) asme).getTimer().getName(), setNumber++));
+            } else if (asme instanceof AvatarResetTimer) {
+                stateinfo = new StateInfo(resetTimerStateSysMLname(((AvatarTimerOperator) asme).getTimer().getName(), resetNumber),
+                        preresetTimerStateSysMLname(((AvatarTimerOperator) asme).getTimer().getName(), resetNumber++));
+            } else if (asme instanceof AvatarExpireTimer) {
+                stateinfo = new StateInfo(expireTimerStateSysMLname(((AvatarTimerOperator) asme).getTimer().getName(), expireNumber),
+                        preexpireTimerStateSysMLname(((AvatarTimerOperator) asme).getTimer().getName(), expireNumber++));
+
+            } else continue; // TODO ? curious states "AvatarEmpty" not handled
+            stateMap.put(asme, stateinfo);
+        }
+        return stateMap;
+    }
+
+    /** generates SysML description of state machine */
+    private void statemachine2SysML(AvatarStateMachine asm) {
+        HashMap<AvatarStateMachineElement, StateInfo> stateMap = computeStateInfo(asm);
+
+        // put state-machine header to avsysml.............................
+        avsysml.append(indentation + "exhibit state '@statemachine' : '#AvatarStateMachine' {\n");
+        indent(1);
+
+        // put SysML states descriptions with associated transition descriptions.........
+        stateMap.forEach(new State2SysML(stateMap));
+
+        unindent(1);
+        avsysml.append(indentation + "}\n");
+    }
+
+    /** buffer to build SysML declarations of outgoing transitions from one state(filled by method transitionsAndRequests) */
+    private StringBuffer sysMLtransitions = new StringBuffer();
+    /** buffer to build in-a-state requests associated to the outgoing transitions of this state (filled by method transitionsAndRequests) */
+    private StringBuffer sysMLrequests = new StringBuffer();
+    /** communication (and timer) states that require an added state before (as they have incomming transitions with action, from the currently
+     * handled state) (filled by method transitionsAndRequests) */
+    private List<AvatarStateMachineElement> requirePreCom = new ArrayList<AvatarStateMachineElement>();
+
+    /** to iterate on the state machine elements of one block. An iteration puts a state declaration in avsysml, followed by the declarations of
+     * its outgoing transitions. If the needed technically added pre-communication are detected while handling these transitions. The declarations
+     * of these added states are added after the transition declarations, followed by their own single outgoing transition.
+     */
+    private class State2SysML implements BiConsumer<AvatarStateMachineElement, StateInfo> {
+        /** provides all states with name information */
+        HashMap<AvatarStateMachineElement, StateInfo> stateMap;
+
+        /** false untill stopState has been encountered (as it can be encountered several times but generated only once) */
+        Boolean stopStateDone;
+
+        public State2SysML(HashMap<AvatarStateMachineElement, StateInfo> _stateMap) {
+            stateMap = _stateMap;
+            stopStateDone = false;
+        }
+
+        /** puts a state declaration in avsysml, followed by the declarations of
+         * its outgoing transitions. If the needed technically added pre-communication are detected while handling these transitions. The declarations
+         * of these added states are added after the transition declarations, followed by their own single outgoing transition.
+         */
+        public void accept(AvatarStateMachineElement asme, StateInfo info) {
+            // compute transition declarations and request descriptions for the outgoing transitions of the state
+            // identify states that require an added pre-communication state
+            indent(1);
+            transitionsAndRequests(info.getName(), asme.getNexts(), ((asme instanceof AvatarState) ? "'@pool'" : "'@request'"), stateMap);
+            unindent(1);
+
+            String requests = sysMLrequests.toString(); // to put after state declaration
+
+            // put state Descriptions ................................
+            // depending on state type
+
+            if(asme instanceof AvatarState){
+                avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarStandardState'");
+                if (requests.equals(""))
+                    avsysml.append(";\n");
+                else
+                    avsysml.append(" = '#AvatarStandardState'(\n" + requests + "\n" + indentation + ");\n");
+            } else
+
+            if(asme instanceof AvatarRandom){ // specific: assign a random value to a variable
+                avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarRandomState' = '#AvatarRandomState'(\n");
+                if (!requests.equals("")) avsysml.append(requests + ",\n"); // put request description (none means default request)
+                indent(1);
+                avsysml.append(indentation + "'@state_action'  = '#Assignment'(\n");
+                indent(1);
+                // the variable to be assigned
+                avsysml.append(indentation + "'@target' = " + attributeSysMLname(((AvatarRandom)asme).getVariable()) + ",\n");
+                // the random value to assign
+                avsysml.append(indentation + "'@value' = '#bound_random'(" +
+                        expr2SysML(((AvatarRandom)asme).getMinValue().replaceAll("__",".")) + ", " +
+                        expr2SysML(((AvatarRandom)asme).getMaxValue().replaceAll("__",".")) +")\n");
+                unindent(1);
+                avsysml.append(indentation + ")\n");
+                unindent(1);
+                avsysml.append(indentation + ");\n");
+            } else
+
+            if(asme instanceof AvatarQueryOnSignal){ // specific: assign the content size of a signal to a variable
+                avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarCountState' = '#AvatarCountState'(\n");
+                if (!requests.equals("")) avsysml.append(requests + ",\n"); // put request description (none means default request)
+                indent(1);
+                avsysml.append(indentation + "'@state_action'  = '#Assignment'(\n");
+                indent(1);
+                // the variable to assign
+                avsysml.append(indentation + "'@target' = " + attributeSysMLname(((AvatarQueryOnSignal)asme).getAttribute().getName()) + ",\n");
+                // the size of the content of the concerned signal
+                avsysml.append(indentation + "'@value' = " + methodMap.get(((AvatarQueryOnSignal)asme).getSignal()).getName() + ".'@amount'()\n");
+                unindent(1);
+                avsysml.append(indentation + ")\n");
+                unindent(1);
+                avsysml.append(indentation + ");\n");
+            } else
+
+            if(asme instanceof AvatarActionOnSignal){
+                if(((AvatarActionOnSignal)asme).isSending()) {
+                    avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarSendState'");
+                    if (requests.equals(""))  // default request
+                        avsysml.append(";\n");
+                    else // put requests description
+                        avsysml.append(" = '#AvatarSendState'(\n" + requests + "\n" + indentation + ");\n");
+                } else {
+                    avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarReceiveState'");
+                    if (requests.equals(""))  // default request
+                        avsysml.append(";\n");
+                    else
+                        avsysml.append(" = '#AvatarReceiveState'(\n" + requests + "\n" + indentation + ");\n");
+                }
+            } else
+
+            if(asme instanceof AvatarStartState){
+                avsysml.append("\n" + indentation + "entry action " + info.getName() + " :'#AvatarStartState'");
+                if (requests.equals(""))  // default request
+                    avsysml.append(";\n");
+                else // put requests description
+                    avsysml.append(" = '#AvatarStartState'(\n" + requests + "\n" + indentation + ");\n");
+            } else
+
+            if(asme instanceof AvatarStopState){ // specific mandatory empty request list (implicite)
+                if(!stopStateDone)
+                    avsysml.append("\n" + indentation + "exit action " + info.getName() + " :'#AvatarStopState';\n");
+                stopStateDone = true;
+            } else
+
+            if(asme instanceof AvatarSetTimer){
+                avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarSetTimerState'");
+                if (requests.equals(""))  // default request
+                    avsysml.append(";\n");
+                else  // put requests description
+                    avsysml.append(" = '#AvatarSetTimerState'(\n" + requests + "\n" + indentation + ");\n");
+            } else
+
+            if(asme instanceof AvatarResetTimer){
+                avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarResetTimerState'");
+                if (requests.equals(""))  // default request
+                    avsysml.append(";\n");
+                else  // put requests description
+                    avsysml.append(" = '#AvatarResetTimerState'(\n" + requests + "\n" + indentation + ");\n");
+            } else
+
+            if(asme instanceof AvatarExpireTimer){
+                avsysml.append("\n" + indentation + "state " + info.getName() + " : '#AvatarExpireTimerState'");
+                if (requests.equals(""))  // default request
+                    avsysml.append(";\n");
+                else  // put requests description
+                    avsysml.append(" = '#AvatarExpireTimerState'(\n" + requests + "\n" + indentation + ");\n");
+            }
+
+            // put transition declarations .................................................
+            avsysml.append(sysMLtransitions);
+
+            // put pre-communication states to add and their single outgoing transition
+            for (AvatarStateMachineElement aos: requirePreCom) {
+                // the name of an added states is obtained by StateInfo.getPreName()
+                // the target of its outgoing transition is the communication state itself (StateInfo.getName())
+                // endTransition adds distribution law information at the end of the transition declarations
+                StateInfo stateinfo = stateMap.get(aos);
+                if (aos instanceof AvatarActionOnSignal) {
+                    MethodInfo signalinfo = methodMap.get(((AvatarActionOnSignal)aos).getSignal());
+
+                    if (((AvatarActionOnSignal)aos).isSending()) {
+                        // put pre-communication State
+                        avsysml.append("\n" + indentation + "state " + stateinfo.getPreName() + " : '#AvatarPreSendState' = '#AvatarPreSendState' (\n");
+                        indent(1);
+                        avsysml.append(indentation + "'@request' = {\n");
+                        indent(1);
+                        // sending request from pre-send state to send state
+                        avsysml.append(sendRequest2SysML(1, "0", "0", signalinfo, ((AvatarActionOnSignal)aos).getOriginalValues()) + "\n");
+                        unindent(1);
+                        avsysml.append(indentation + "}\n");
+                        unindent(1);
+                        avsysml.append(indentation + ");\n");
+                        // transition from pre-send state to send state
+                        avsysml.append("\n" + indentation + "transition : '#AvatarTransition' first " + stateinfo.getPreName() +
+                                " then " + stateinfo.getName() +
+                                endTransition(0,"","", 1));
+                    } else {
+                        // put pre-communication State
+                        avsysml.append("\n" + indentation + "state " + stateinfo.getPreName() + " : '#AvatarPreReceiveState' = '#AvatarPreReceiveState' (\n");
+                        indent(1);
+                        avsysml.append(indentation + "'@request' = {\n");
+                        indent(1);
+                        // receiving request from pre-receive state to receive state
+                        avsysml.append(receiveRequest2SysML(1, "0", "0", signalinfo.getName()) + "\n");
+                        unindent(1);
+                        avsysml.append(indentation + "}\n");
+                        unindent(1);
+                        avsysml.append(indentation + ");\n");
+                        // transition from pre-receive state to receive state
+                        avsysml.append("\n" + indentation + "transition : '#AvatarTransition' first " + stateinfo.getPreName() + "\n");
+                        indent(1);
+                        // updating target variables with received values
+                        String doAction = receiveActions2SysML(signalinfo, ((AvatarActionOnSignal)aos).getOriginalValues());
+                        if (doAction.length() == 0) // receive simple signal (without carried value)
+                            avsysml.append(indentation + "then " + stateinfo.getName() +
+                                    endTransition(0,"","", 1));
+                        else { // put updating action
+                            avsysml.append(doAction);
+                            avsysml.append(" then " + stateinfo.getName() +
+                                    endTransition(0,"","", 1));
+                        }
+                        unindent(1);
+                    }
+                } else if (aos instanceof AvatarSetTimer) { // a special kind of send request
+                    // put pre-communication State
+                    avsysml.append("\n" + indentation + "state " + stateinfo.getPreName() + " : '#AvatarPreSendState' = '#AvatarPreSendState' (\n");
+                    indent(1);
+                    avsysml.append(indentation + "'@request' =\n");
+                    indent(1);
+                    // put the specific sending request, carrying a value
+                    avsysml.append(setTimerRequest2SysML(1, "0", "0",
+                            timerBlockSysMLname(((AvatarSetTimer) aos).getTimer().getName()) ,
+                            ((AvatarSetTimer)aos).getTimerValue()) + "\n");
+                    unindent(2);
+                    avsysml.append(indentation + ");\n");
+                    // put the associated transition
+                    avsysml.append("\n" + indentation + "transition : '#AvatarTransition' first " + stateinfo.getPreName() +
+                            " then " + stateinfo.getName() +
+                            endTransition(0,"","", 1));
+
+                } else if (aos instanceof AvatarResetTimer) { // a special kind of send request
+                    // put pre-communication State
+                    avsysml.append("\n" + indentation + "state " + stateinfo.getPreName() + " : '#AvatarPreSendState' = '#AvatarPreSendState' (\n");
+                    indent(1);
+                    avsysml.append(indentation + "'@request' =\n");
+                    indent(1);
+                    // put the specific sending request, carrying no value
+                    avsysml.append(resetTimerRequest2SysML(1, "0", "0",
+                            timerBlockSysMLname(((AvatarResetTimer) aos).getTimer().getName())) + "\n");
+                    unindent(2);
+                    avsysml.append(indentation + ");\n");
+                    // put the associated transition
+                    avsysml.append("\n" + indentation + "transition : '#AvatarTransition' first " + stateinfo.getPreName() +
+                            " then " + stateinfo.getName() +
+                            endTransition(0,"","", 1));
+
+                } else if (aos instanceof AvatarExpireTimer) { // a special kind of send request
+                    // put pre-communication State
+                    avsysml.append("\n" + indentation + "state " + stateinfo.getPreName() + " : '#AvatarPreReceiveState' = '#AvatarPreReceiveState' (\n");
+                    indent(1);
+                    avsysml.append(indentation + "'@request' =\n");
+                    indent(1);
+                    // put the specific receiving request, carrying no value
+                    avsysml.append(expireTimerRequest2SysML(1, "0", "0",
+                            timerBlockSysMLname(((AvatarExpireTimer) aos).getTimer().getName())) + "\n");
+                    unindent(2);
+                    avsysml.append(indentation + ");\n");
+                    // put the associated transition
+                    avsysml.append("\n" + indentation + "transition : '#AvatarTransition' first " + stateinfo.getPreName() +
+                            endTransition(0,"","", 1));
+                    indent(1);
+                    avsysml.append(indentation + "then " + stateinfo.getName() + ";\n");
+                    unindent(1);
+                }
+            }
+
+        }
+    }
+
+    /** distribution law information, to put  at the end of associated the transition declarations */
+    private String endTransition(int delayDistributionLaw, String delayExtra1, String delayExtra2, double probability){
+
+        if (delayDistributionLaw == DELAY_UNIFORM_LAW && probability == 1) return ";\n"; // nothing because default
+
+        StringBuffer result = new StringBuffer(" {\n");
+        indent(1);
+
+        // put distribution law
+        result.append(indentation + "attribute '@delayDistributionLaw' : String = \"" + DISTRIBUTION_LAWS[delayDistributionLaw] + "\";\n");
+
+        // put distribution law first parameter (if exists)
+        if (NB_OF_EXTRA_ATTRIBUTES[delayDistributionLaw] > 0)
+            result.append(indentation + "attribute '" + LABELS_OF_EXTRA_ATTRIBUTES_1[delayDistributionLaw] + "' : String = \""
+                + delayExtra1 + "\";\n");
+
+        // put distribution law second parameter (if exists)
+        if (NB_OF_EXTRA_ATTRIBUTES[delayDistributionLaw] > 1)
+            result.append(indentation + "attribute '" + LABELS_OF_EXTRA_ATTRIBUTES_2[delayDistributionLaw] + "' : String = \""
+                + delayExtra2 + "\";\n");
+
+        // put probability (if different from the default one)
+        if (probability != DEFAULT_PROBABILITY)
+            result.append(indentation + "attribute '@weight' : Real = " + probability + ";\n");
+
+        unindent(1);
+        result.append(indentation + "}\n");
+        return result.toString();
+    }
+
+    /** computes transition declarations and request descriptions for the outgoing transitions of the state. Put the corresponding
+     * texts in the sysMLtransitions and sysMLrequests StringBuffers. While doing this, identify communication states that require
+     * an added pre-communication state.
+     * @param srcName name of the source state
+     * @param nexts outgoing transitions from the source state
+     * @param poolName "pool" or "request" depending on the number of allowed outgoing transitions
+     * @param stateMap to find state names
+     */
+    private void transitionsAndRequests(String srcName, List<AvatarStateMachineElement> nexts, String poolName,
+                                        HashMap<AvatarStateMachineElement, StateInfo> stateMap) {
+        // initialization
+        requirePreCom.clear();
+        sysMLtransitions.delete(0, sysMLtransitions.length());
+        sysMLrequests.delete(0, sysMLrequests.length());
+
+        int nb = nexts.size();
+        if (nb == 0) { // no transition
+            sysMLrequests.append(indentation + poolName + " = { null }\n");
+            return;
+        }
+        if (nb == 1) { // no parenthesis required
+            indent(1);
+            // handle the single transition
+            transitionAndRequest(srcName, (AvatarTransition)nexts.get(0), 0, stateMap);
+            unindent(1);
+
+            if(sysMLrequests.toString().trim().equals("'#immediate_request'")) { // remove because it is the default
+                sysMLrequests.delete(0, sysMLrequests.length());
+                return;
+            }
+            // wrap without parenthesis
+            sysMLrequests.insert(0, indentation + poolName + " = {\n");
+            sysMLrequests.append("\n" + indentation + "}");
+            return;
+        }
+        // more than one request -> list between parenthesis
+        indent(1);
+        // put list
+        for(int i=0; i<nb; i++){
+            transitionAndRequest(srcName, (AvatarTransition)nexts.get(i), i+1, stateMap);
+            if(i != nb-1)
+                sysMLrequests.append(",\n");
+            else
+                 sysMLrequests.append("\n");
+        }
+        unindent(1);
+        // wrap with parenthesis
+        sysMLrequests.insert(0, indentation + poolName + " = {(\n");
+        sysMLrequests.append(indentation + ")}");
+    }
+
+    /** remove wrapping brackets of a guard (if exist)*/
+    private String clean_guard(String _guard) {
+        int open = _guard.indexOf('[');
+        int close = _guard.lastIndexOf(']');
+        if (open != -1 && close != -1 && close > open)
+            return _guard.substring(open+1, close);
+        else return _guard;
+    }
+
+    /** add a transition declaration in sysMLtransitions and the associated request description in sysMLrequests. Ii the the
+     * transition has actions and the transition's target is a communication, then this target is identified as requiring an
+     * added pre-communication state (added to requirePreCom). In the produced SysML model, transitions are ordered with indexes
+     * beginning at 1.
+     *
+     * @param srcName source of the transition
+     * @param at the transition to handle
+     * @param index index of the transition, or 0 if transition is alone (real index is 1)
+     * @param stateMap to make state names available
+     */
+    private void transitionAndRequest(String srcName, AvatarTransition at, int index, HashMap<AvatarStateMachineElement, StateInfo> stateMap){
+        int transindex = ((index == 0) ? 1 : index); // true index
+
+        // identify cases and instantiate case specific parameters for the parametrized handling that follows ................
+
+        // declare parameters
+        boolean guarded = !at.hasNonDeterministicGuard();
+        AvatarStateMachineElement target = at.getNext(0);
+        String tgtName; // SysML name of transition's target (in SysML model, may differ from Avatar model, due to added states)
+        int requestType = 0; // 0:trivial, 1:Send, 2:Receive, 3:SetTimer, 4: ResetTimer, 5:ExpireTimer
+
+        // computes parameters
+        if((at.getActions()!=null && at.getActions().size()!=0) &&
+                (target instanceof AvatarActionOnSignal || target instanceof AvatarTimerOperator)) {
+            // added pre-communication state required before target (in avatar) which is communication. Type: trivial.
+            requirePreCom.add(target);
+            tgtName = stateMap.get(target).getPreName(); // transition's target is the added state
+        }
+        else {
+            tgtName = stateMap.get(target).getName(); // transition's target is the same as in Avatar
+
+            if(target instanceof AvatarActionOnSignal){ // communication
+                if (((AvatarActionOnSignal)target).isSending())
+                    requestType = 1; // Send
+                else
+                    requestType = 2; // Receive
+            }
+            else if (target instanceof AvatarSetTimer)
+                requestType = 3; // SetTimer
+            else if (target instanceof AvatarResetTimer)
+                requestType = 4; // ResetTimer
+            else if (target instanceof AvatarExpireTimer)
+                requestType = 5; // ExpireTimer
+        }
+
+        // put transition's request respecting parameters.....................................
+
+        if (guarded) {
+            sysMLrequests.append(indentation + "if " +
+                    expr2SysML(clean_guard((at).getOriginalGuard())) + " ?\n");
+            indent(1);
+        }
+        // delay don't depend on parameters
+        String minDelay = ( at.getOriginalMinDelay().length()==0 ? "0" : expr2SysML(at.getOriginalMinDelay()) );
+        String maxDelay = ( at.getOriginalMaxDelay().length()==0 ? "0" : expr2SysML(at.getOriginalMaxDelay()) );
+
+        // call the type specific compute-request method and put request
+        if(requestType == 0) // Trivial
+            sysMLrequests.append(trivialRequest2SysML(transindex,
+                    minDelay,
+                    maxDelay));
+        else if (requestType == 1) // Send
+            sysMLrequests.append(sendRequest2SysML(transindex,
+                    minDelay,
+                    maxDelay,
+                     methodMap.get(((AvatarActionOnSignal)target).getSignal()),
+                    ((AvatarActionOnSignal)target).getOriginalValues()));
+        else if (requestType == 2) // Receive
+            sysMLrequests.append(receiveRequest2SysML(transindex,
+                    minDelay,
+                    maxDelay,
+                    methodMap.get(((AvatarActionOnSignal)target).getSignal()).getName()));
+        else if (requestType == 3) // Set
+            sysMLrequests.append(setTimerRequest2SysML(transindex,
+                    minDelay,
+                    maxDelay,
+                    timerBlockSysMLname(((AvatarTimerOperator) target).getTimer().getName()),
+                    ((AvatarSetTimer) target).getTimerValue()));
+        else  if (requestType == 4) // Reset
+            sysMLrequests.append(resetTimerRequest2SysML(transindex,
+                    minDelay,
+                    maxDelay,
+                    timerBlockSysMLname(((AvatarTimerOperator) target).getTimer().getName())));
+        else // Expire
+            sysMLrequests.append(expireTimerRequest2SysML(transindex,
+                    minDelay,
+                    maxDelay,
+                    timerBlockSysMLname(((AvatarTimerOperator) target).getTimer().getName())));
+
+        if(guarded) {
+            unindent(1);
+            sysMLrequests.append("\n" + indentation + "else '#nok_request'(" + transindex + ")");
+        }
+
+        // put transition's declaration ........................................
+
+        unindent(2); // to reach indent level of request declaration
+
+        // compute transition'actions
+        String doAction; // the SysML action part of the transition
+        indent(1);
+        if(requestType == 2) // compute receive specific actions (variable update). No other transition actions thanks to added states.
+            doAction = receiveActions2SysML(methodMap.get(((AvatarActionOnSignal)target).getSignal()),
+                    ((AvatarActionOnSignal)target).getOriginalValues());
+        else // computes actions from the Avatar transition's action list
+            doAction = transitionActions2SysML(at);
+        unindent(1);
+
+        // put transition declaration
+        // header
+        sysMLtransitions.append("\n" + indentation + "transition : '#AvatarTransition' first " + srcName);
+        // index
+        if(index > 0) // not default thus explicit index
+            sysMLtransitions.append(" if '@index' == " + index + "\n");
+        else // default thus implicit index
+            sysMLtransitions.append("\n");
+        // actions
+        indent(1);
+        if (doAction == null || doAction.length() == 0) // no action, put target and distribution law information
+            sysMLtransitions.append(indentation + "then " + tgtName +
+                    endTransition(at.getDelayDistributionLaw(), at.getDelayExtra1(), at.getDelayExtra2(), at.getProbability()));
+        else { // put actions, target and distribution law information
+            sysMLtransitions.append(doAction);
+            sysMLtransitions.append(" then " + tgtName +
+                    endTransition(at.getDelayDistributionLaw(),at.getDelayExtra1(),at.getDelayExtra2(), at.getProbability()));
+        }
+        indent(1);
+    }
+
+    /** computes request to non-communication state
+     *
+     * @param index request index
+     * @param min minimal delay. not null and not empty (must be set to "0" in these cases)
+     * @param max maximal delay. not null and not empty (must be set to "0" in these cases)
+     * @return text of the relevant SysML call to the relevant SysML constructor
+     */
+    private String trivialRequest2SysML(int index, String min, String max) {
+        if (max.equals("0")) // no delay or simple delay
+            if (min.equals("0")) // no delay
+                if (index == 1) // default thus implicit
+                    return indentation + "'#immediate_request'";
+                else // explicit
+                    return indentation + "'#TrivialRequest'('@index' =  " + index + ")";
+            else // simple delay
+                if (index == 1) // default thus implicit
+                    return indentation + "'#TrivialRequest'('@delay' = " + min + ")";
+                else // explicit
+                    return indentation + "'#TrivialRequest'('@index' =  " + index + ", '@delay' = " + min + ")";
+        else if (max.trim().equals(min.trim())) // simple delay (equal bounds)
+            if(index == 1) // default thus implicit
+                return indentation + "'#TrivialRequest'('@delay' = " + min + ")";
+            else // explicit
+                return indentation + "'#TrivialRequest'('@index' =  " + index + ", '@delay' = " + min + ")";
+        else // range delay
+            if(index == 1) // default thus implicit
+                return indentation + "'#TrivialRequest'('@delay' = '#bound_random'(" + min + ", " + max + "))";
+            else // explicit
+                return indentation + "'#TrivialRequest'('@index' =  " + index + ", '@delay' = '#bound_random'(" + min + ", " + max + "))";
+    }
+
+    /** computes request to send state
+     *
+     * @param index request index
+     * @param min minimal delay. not null and not empty (must be set to "0" in these cases)
+     * @param max maximal delay. not null and not empty (must be set to "0" in these cases)
+     * @param signalInfo name and profile information about the concerned signal
+     * @param values strings denoting send parameter values
+     * @return text of the relevant SysML call to the relevant SysML constructor
+     */
+    private String sendRequest2SysML(int index, String min, String max, MethodInfo signalInfo, List<String> values) {
+        // request Header (SysML constructor)
+        StringBuffer result = new StringBuffer(indentation + "'#SendRequest'(\n");
+        indent(1);
+
+        // index
+        if (index != 1) // not default thus explicit
+            result.append(indentation + "'@index' =  " + index + ",\n");
+
+        // signal (equivalent to channel in SysML)
+        result.append(indentation + "'@channel'= " + signalInfo.getName() + ",\n");
+
+        // delay
+        if (max.equals("0")) { // no delay or simple delay
+            if (!min.equals("0")) // simple delay
+                result.append(indentation + "'@delay' = " + min + ",\n");
+        }
+        else if (max.trim().equals(min.trim())) // simple delay (equal bounds)
+            result.append(indentation + "'@delay' = " + min + ",\n");
+        else // range delay
+            result.append(indentation + "'@delay' = '#bound_random'(" + min + ", " + max + "),\n");
+
+        // payload
+        int nbFields = signalInfo.getArity();
+        if (nbFields == 0) // simple SysML constructor call
+            result.append(indentation + "'@payload' = " + signalInfo.getMessageType() + "()\n");
+        else { // SysML constructor call with parameters
+            result.append(indentation + "'@payload' = " + signalInfo.getMessageType() + "(\n");
+            indent(1);
+            int j = 0;
+            while (j < nbFields) { // iterate on parameters
+                result.append(indentation + expr2SysML(values.get(j)) + ",\n");
+                j++;
+            }
+            result.replace(result.length()-2, result.length(), " )\n");
+            unindent(1);
+        }
+
+        unindent(1);
+        result.append(indentation + ")");
+        return result.toString();
+    }
+
+
+    /** computes request to set-timer state
+     *
+     * @param index request index
+     * @param min minimal delay. not null and not empty (must be set to "0" in these cases)
+     * @param max maximal delay. not null and not empty (must be set to "0" in these cases)
+     * @param timer name of the concerned timer
+     * @param value string denoting the duration until timer expiration (countdown)
+     * @return text of the relevant SysML call to the relevant SysML constructor
+     */
+    private String setTimerRequest2SysML(int index, String min, String max, String timer, String value) {
+        // request Header (SysML constructor)
+        StringBuffer result = new StringBuffer(indentation + "'#AvatarSetTimerRequest'(\n");
+        indent(1);
+
+        // index
+        if (index != 1) // not default thus explicit
+            result.append(indentation + "'@index' =  " + index + ",\n");
+
+        // setting a timer is sending a message on a dedicated "@set" channel of the timer block
+        result.append(indentation + "'@channel'= " + timer + ".'@set'" + ",\n");
+
+        // delay
+        if (max.equals("0")) { // no delay or simple delay
+            if (!min.equals("0")) // simple delay
+                result.append(indentation + "'@delay' = " + min + ",\n");
+        }
+        else if (max.equals(min))  // simple delay (equal bounds)
+            result.append(indentation + "'@delay' = " + min + ",\n");
+        else // range delay
+            result.append(indentation + "'@delay' = '#bound_random'(" + min + ", " + max + "),\n");
+
+        // payload
+        result.append(indentation + "'@payload' = '#TimerSetMsg'(" + value + ")\n");
+
+        unindent(1);
+        result.append(indentation + ")");
+        return result.toString();
+    }
+
+    /** computes request to reset-timer state
+     *
+     * @param index request index
+     * @param min minimal delay. not null and not empty (must be set to "0" in these cases)
+     * @param max maximal delay. not null and not empty (must be set to "0" in these cases)
+     * @param timer name of the concerned timer
+     * @return text of the relevant SysML call to the relevant SysML constructor
+     */
+    private String resetTimerRequest2SysML(int index, String min, String max, String timer) {
+        // request Header (SysML constructor)
+        StringBuffer result = new StringBuffer(indentation + "'#AvatarResetTimerRequest'(\n");
+        indent(1);
+
+        //index
+        if (index != 1) // not default thus explicit
+            result.append(indentation + "'@index' =  " + index + ",\n");
+
+        // resetting a timer is sending a message on a dedicated "@reset" channel of the timer block
+        result.append(indentation + "'@channel'= " + timer + ".'@reset'" + ",\n");
+
+        // delay
+        if (max.equals("0")) { // no delay or simple delay
+            if (!min.equals("0")) // simple delay
+                result.append(indentation + "'@delay' = " + min + ",\n");
+        }
+        else if (max.equals(min)) // simple delay (equal bounds)
+            result.append(indentation + "'@delay' = " + min + ",\n");
+        else // range delay
+            result.append(indentation + "'@delay' = '#bound_random'(" + min + ", " + max + "),\n");
+
+        // payload (simple message without value)
+        result.append(indentation + "'@payload' = '#TimerResetMsg'()\n");
+
+        unindent(1);
+        result.append(indentation + ")");
+        return result.toString();
+    }
+
+    /** computes request to send state
+     *
+     * @param index request index
+     * @param min minimal delay. not null and not empty (must be set to "0" in these cases)
+     * @param max maximal delay. not null and not empty (must be set to "0" in these cases)
+     * @param signalName name of the concerned signal
+     * @return text of the relevant SysML call to the relevant SysML constructor
+     */
+    private String receiveRequest2SysML(int index, String min, String max, String signalName) {
+        // request Header (SysML constructor)
+        StringBuffer result = new StringBuffer(indentation + "'#ReceiveRequest'(\n");
+        indent(1);
+
+        // index
+        if (index != 1) // not default thus explicit
+            result.append(indentation + "'@index' =  " + index + ",\n");
+
+        // signal (equivalent to channel in SysML)
+        result.append(indentation + "'@channel'= " + signalName);
+
+        // delay
+        if (max.equals("0")) // no delay or simple delay
+            if (!min.equals("0")) // simple delay
+                result.append(",\n" + indentation + "'@delay' = " + min + "\n");
+            else // no delay
+                result.append("\n");
+        else if (max.equals(min)) // simple delay (equal bounds)
+            result.append(indentation + "'@delay' = " + min + ",\n");
+        else // range delay
+            result.append(",\n" + indentation + "'@delay' = '#bound_random'(" + min + ", " + max + ")\n");
+
+        unindent(1);
+        result.append(indentation + ")");
+        return result.toString();
+    }
+
+    private String expireTimerRequest2SysML(int index, String min, String max, String chname) {
+        // request Header (SysML constructor)
+        StringBuffer result = new StringBuffer(indentation + "'#AvatarExpireTimerRequest'(\n");
+        indent(1);
+
+        // index
+        if (index != 1) // not default thus explicit
+            result.append(indentation + "'@index' =  " + index + ",\n");
+
+        // timer expiration is detected by receiving a message on a dedicated "@expire" channel of the timer block
+        result.append(indentation + "'@channel'= " + chname + ".'@expire'");
+
+        // delay
+        if (max.equals("0")) // no delay or simple delay
+            if (!min.equals("0")) // simple delay
+                result.append(",\n" + indentation + "'@delay' = " + min + "\n");
+            else // no delay
+                result.append("\n");
+        else if (max.equals(min)) // simple delay (equal bounds)
+            result.append(indentation + "'@delay' = " + min + ",\n");
+        else // range delay
+            result.append(",\n" + indentation + "'@delay' = '#bound_random'(" + min + ", " + max + ")\n");
+
+        unindent(1);
+        result.append(indentation + ")");
+        return result.toString();
+    }
+
+    /** computes the action part of the SysML transition associated to an Avatar transition */
+    String transitionActions2SysML(AvatarTransition at) {
+        StringBuffer result;
+
+        int size = at.getNbOfAction();
+        if (size == 0) return null;
+
+        // header
+        result = new StringBuffer(indentation + "do action : '#TransitionAction' {\n" + indentation + indentStep + "first start;\n");
+        indent(1);
+        for(int i = 0; i < size; i++) { // iterate on actions of the Avatar transition
+            String ac = at.getOriginalAction(i);
+            int eq = ac.indexOf("=");
+            if(eq != -1) { // assignment action
+                String lh = leftHandSysMLname(ac.substring(0,eq).trim()); // lefthand
+                String rh = expr2SysML(ac.substring(eq+1).trim()); // righthand
+                result.append(indentation + "then assign " + lh + ":= " + rh + ";\n");
+            }
+            else { // method call
+                result.append(indentation + "then action = " + expr2SysML(ac) + ";\n");
+            }
+        }
+        result.append(indentation + "then done;\n");
+
+        unindent(1);
+        result.append(indentation + "}");
+        return result.toString();
+    }
+
+    /** computes the action part of the SysML transition associated to an Avatar transition leading to a receive state. Due to the introduction of
+     * pre-communication states (when required), there are no other actions than the updating of variables w.r.t. the received message */
+    String receiveActions2SysML(MethodInfo signalInfo, List<String> values) {
+        if (values == null || values.size() == 0) return ""; // simple signal without value
+
+        StringBuffer result = new StringBuffer(indentation + "do action : '#ReceiveAction' {\n");
+        indent(1);
+
+        // put access to the received message
+        result.append(indentation + "item '@msg' : " + signalInfo.getMessageType() + " = '@payload' as " + signalInfo.getMessageType() +
+                ";\n" + indentation + "first start;\n");
+
+        int nbFields = signalInfo.getArity();
+        int j = 0;
+        while (j < nbFields) { // iterate on message fields
+           result.append(indentation + "then assign " + leftHandSysMLname(values.get(j)) +
+                                " := '@msg'." + signalInfo.getFieldName(j) + ";\n");
+           j++;
+        }
+        result.append(indentation + "then done;\n");
+
+        unindent(1);
+        result.append(indentation + "}");
+        return result.toString();
+    }
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLLexer.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLLexer.java
new file mode 100644
index 0000000000000000000000000000000000000000..b68c5c39bdc6e733aab1d0a83374b0e59dd98cb8
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLLexer.java
@@ -0,0 +1,706 @@
+/* The following code was generated by JFlex 1.4.3 on 26/09/2024 17:01 */
+
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.tosysmlv2;
+import java_cup.runtime.*;
+
+
+/**
+ * This class is a scanner generated by 
+ * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
+ * on 26/09/2024 17:01 from the specification file
+ * <code>__Avatar2SysMLLexer__.jflex</code>
+ */
+public class Avatar2SysMLLexer implements java_cup.runtime.Scanner {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
+  /** initial size of the lookahead buffer */
+  private static final int ZZ_BUFFERSIZE = 16384;
+
+  /** lexical states */
+  public static final int YYINITIAL = 0;
+
+  /**
+   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
+   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+   *                  at the beginning of a line
+   * l is of the form l = 2*k, k a non negative integer
+   */
+  private static final int ZZ_LEXSTATE[] = { 
+     0, 0
+  };
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final String ZZ_CMAP_PACKED = 
+    "\11\0\1\1\1\1\1\0\2\1\22\0\1\1\1\30\3\0\1\22"+
+    "\1\23\1\0\1\34\1\35\1\20\1\16\1\36\1\17\1\5\1\21"+
+    "\1\2\11\3\2\0\1\32\1\31\1\33\2\0\32\4\4\0\1\4"+
+    "\1\0\1\13\2\4\1\25\1\11\1\12\5\4\1\14\1\4\1\24"+
+    "\1\27\2\4\1\7\1\15\1\6\1\10\5\4\1\0\1\26\uff83\0";
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+  /** 
+   * Translates DFA states to action switch labels.
+   */
+  private static final int [] ZZ_ACTION = zzUnpackAction();
+
+  private static final String ZZ_ACTION_PACKED_0 =
+    "\1\0\1\1\1\2\2\3\4\4\1\5\1\6\1\7"+
+    "\1\10\1\11\1\1\1\4\1\1\1\4\1\12\1\1"+
+    "\1\13\1\14\1\15\1\16\1\17\3\4\1\20\1\4"+
+    "\2\21\1\22\1\23\1\24\1\25\2\4\1\20\1\12"+
+    "\1\26\1\4\1\27";
+
+  private static int [] zzUnpackAction() {
+    int [] result = new int[43];
+    int offset = 0;
+    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAction(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /** 
+   * Translates a state to a row index in the transition table
+   */
+  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+  private static final String ZZ_ROWMAP_PACKED_0 =
+    "\0\0\0\37\0\37\0\37\0\76\0\135\0\174\0\233"+
+    "\0\272\0\37\0\37\0\37\0\37\0\37\0\331\0\370"+
+    "\0\u0117\0\u0136\0\u0155\0\u0174\0\u0193\0\u01b2\0\37\0\37"+
+    "\0\37\0\u01d1\0\u01f0\0\u020f\0\37\0\u022e\0\37\0\135"+
+    "\0\37\0\37\0\37\0\37\0\u024d\0\u026c\0\135\0\135"+
+    "\0\135\0\u028b\0\135";
+
+  private static int [] zzUnpackRowMap() {
+    int [] result = new int[43];
+    int offset = 0;
+    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+    int i = 0;  /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int high = packed.charAt(i++) << 16;
+      result[j++] = high | packed.charAt(i++);
+    }
+    return j;
+  }
+
+  /** 
+   * The transition table of the DFA
+   */
+  private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+  private static final String ZZ_TRANS_PACKED_0 =
+    "\1\2\1\3\1\4\1\5\1\6\1\2\1\7\3\6"+
+    "\1\10\1\11\2\6\1\12\1\13\1\14\1\15\1\16"+
+    "\1\17\1\20\1\6\1\21\1\22\1\23\1\24\1\25"+
+    "\1\26\1\27\1\30\1\31\41\0\2\5\35\0\14\6"+
+    "\6\0\2\6\1\0\1\6\11\0\5\6\1\32\6\6"+
+    "\6\0\2\6\1\0\1\6\11\0\11\6\1\33\2\6"+
+    "\6\0\2\6\1\0\1\6\11\0\14\6\6\0\1\34"+
+    "\1\6\1\0\1\6\32\0\1\35\15\0\14\6\6\0"+
+    "\2\6\1\0\1\36\35\0\1\37\12\0\5\6\1\40"+
+    "\6\6\6\0\2\6\1\0\1\6\40\0\1\41\36\0"+
+    "\1\42\36\0\1\43\36\0\1\44\7\0\6\6\1\45"+
+    "\5\6\6\0\2\6\1\0\1\6\11\0\12\6\1\46"+
+    "\1\6\6\0\2\6\1\0\1\6\11\0\14\6\6\0"+
+    "\1\6\1\47\1\0\1\6\11\0\4\6\1\50\7\6"+
+    "\6\0\2\6\1\0\1\6\11\0\7\6\1\51\4\6"+
+    "\6\0\2\6\1\0\1\6\11\0\13\6\1\52\6\0"+
+    "\2\6\1\0\1\6\11\0\7\6\1\53\4\6\6\0"+
+    "\2\6\1\0\1\6\7\0";
+
+  private static int [] zzUnpackTrans() {
+    int [] result = new int[682];
+    int offset = 0;
+    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackTrans(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      value--;
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /* error codes */
+  private static final int ZZ_UNKNOWN_ERROR = 0;
+  private static final int ZZ_NO_MATCH = 1;
+  private static final int ZZ_PUSHBACK_2BIG = 2;
+
+  /* error messages for the codes above */
+  private static final String ZZ_ERROR_MSG[] = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+  /**
+   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+   */
+  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+  private static final String ZZ_ATTRIBUTE_PACKED_0 =
+    "\1\0\3\11\5\1\5\11\10\1\3\11\3\1\1\11"+
+    "\1\1\1\11\1\1\4\11\7\1";
+
+  private static int [] zzUnpackAttribute() {
+    int [] result = new int[43];
+    int offset = 0;
+    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+  /** the input device */
+  private java.io.Reader zzReader;
+
+  /** the current state of the DFA */
+  private int zzState;
+
+  /** the current lexical state */
+  private int zzLexicalState = YYINITIAL;
+
+  /** this buffer contains the current text to be matched and is
+      the source of the yytext() string */
+  private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+  /** the textposition at the last accepting state */
+  private int zzMarkedPos;
+
+  /** the current text position in the buffer */
+  private int zzCurrentPos;
+
+  /** startRead marks the beginning of the yytext() string in the buffer */
+  private int zzStartRead;
+
+  /** endRead marks the last character in the buffer, that has been read
+      from input */
+  private int zzEndRead;
+
+  /** number of newlines encountered up to the start of the matched text */
+  private int yyline;
+
+  /** the number of characters up to the start of the matched text */
+  private int yychar;
+
+  /**
+   * the number of characters from the last newline up to the start of the 
+   * matched text
+   */
+  private int yycolumn;
+
+  /** 
+   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+   */
+  private boolean zzAtBOL = true;
+
+  /** zzAtEOF == true <=> the scanner is at the EOF */
+  private boolean zzAtEOF;
+
+  /** denotes if the user-EOF-code has already been executed */
+  private boolean zzEOFDone;
+
+  /* user code: */
+
+
+
+  /**
+   * Creates a new scanner
+   * There is also a java.io.InputStream version of this constructor.
+   *
+   * @param   in  the java.io.Reader to read input from.
+   */
+  public Avatar2SysMLLexer(java.io.Reader in) {
+    this.zzReader = in;
+  }
+
+  /**
+   * Creates a new scanner.
+   * There is also java.io.Reader version of this constructor.
+   *
+   * @param   in  the java.io.Inputstream to read input from.
+   */
+  public Avatar2SysMLLexer(java.io.InputStream in) {
+    this(new java.io.InputStreamReader(in));
+  }
+
+  /** 
+   * Unpacks the compressed character translation table.
+   *
+   * @param packed   the packed character translation table
+   * @return         the unpacked character translation table
+   */
+  private static char [] zzUnpackCMap(String packed) {
+    char [] map = new char[0x10000];
+    int i = 0;  /* index in packed string  */
+    int j = 0;  /* index in unpacked array */
+    while (i < 100) {
+      int  count = packed.charAt(i++);
+      char value = packed.charAt(i++);
+      do map[j++] = value; while (--count > 0);
+    }
+    return map;
+  }
+
+
+  /**
+   * Refills the input buffer.
+   *
+   * @return      <code>false</code>, iff there was new input.
+   * 
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  private boolean zzRefill() throws java.io.IOException {
+
+    /* first: make room (if you can) */
+    if (zzStartRead > 0) {
+      System.arraycopy(zzBuffer, zzStartRead,
+                       zzBuffer, 0,
+                       zzEndRead-zzStartRead);
+
+      /* translate stored positions */
+      zzEndRead-= zzStartRead;
+      zzCurrentPos-= zzStartRead;
+      zzMarkedPos-= zzStartRead;
+      zzStartRead = 0;
+    }
+
+    /* is the buffer big enough? */
+    if (zzCurrentPos >= zzBuffer.length) {
+      /* if not: blow it up */
+      char newBuffer[] = new char[zzCurrentPos*2];
+      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+      zzBuffer = newBuffer;
+    }
+
+    /* finally: fill the buffer with new input */
+    int numRead = zzReader.read(zzBuffer, zzEndRead,
+                                            zzBuffer.length-zzEndRead);
+
+    if (numRead > 0) {
+      zzEndRead+= numRead;
+      return false;
+    }
+    // unlikely but not impossible: read 0 characters, but not at end of stream    
+    if (numRead == 0) {
+      int c = zzReader.read();
+      if (c == -1) {
+        return true;
+      } else {
+        zzBuffer[zzEndRead++] = (char) c;
+        return false;
+      }     
+    }
+
+	// numRead < 0
+    return true;
+  }
+
+    
+  /**
+   * Closes the input stream.
+   */
+  public final void yyclose() throws java.io.IOException {
+    zzAtEOF = true;            /* indicate end of file */
+    zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+    if (zzReader != null)
+      zzReader.close();
+  }
+
+
+  /**
+   * Resets the scanner to read from a new input stream.
+   * Does not close the old reader.
+   *
+   * All internal variables are reset, the old input stream 
+   * <b>cannot</b> be reused (internal buffer is discarded and lost).
+   * Lexical state is set to <code>ZZ_INITIAL</code>.
+   *
+   * @param reader   the new input stream 
+   */
+  public final void yyreset(java.io.Reader reader) {
+    zzReader = reader;
+    zzAtBOL  = true;
+    zzAtEOF  = false;
+    zzEOFDone = false;
+    zzEndRead = zzStartRead = 0;
+    zzCurrentPos = zzMarkedPos = 0;
+    yyline = yychar = yycolumn = 0;
+    zzLexicalState = YYINITIAL;
+  }
+
+
+  /**
+   * Returns the current lexical state.
+   */
+  public final int yystate() {
+    return zzLexicalState;
+  }
+
+
+  /**
+   * Enters a new lexical state
+   *
+   * @param newState the new lexical state
+   */
+  public final void yybegin(int newState) {
+    zzLexicalState = newState;
+  }
+
+
+  /**
+   * Returns the text matched by the current regular expression.
+   */
+  public final String yytext() {
+    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+  }
+
+
+  /**
+   * Returns the character at position <code>pos</code> from the 
+   * matched text. 
+   * 
+   * It is equivalent to yytext().charAt(pos), but faster
+   *
+   * @param pos the position of the character to fetch. 
+   *            A value from 0 to yylength()-1.
+   *
+   * @return the character at position pos
+   */
+  public final char yycharat(int pos) {
+    return zzBuffer[zzStartRead+pos];
+  }
+
+
+  /**
+   * Returns the length of the matched text region.
+   */
+  public final int yylength() {
+    return zzMarkedPos-zzStartRead;
+  }
+
+
+  /**
+   * Reports an error that occured while scanning.
+   *
+   * In a wellformed scanner (no or only correct usage of 
+   * yypushback(int) and a match-all fallback rule) this method 
+   * will only be called with things that "Can't Possibly Happen".
+   * If this method is called, something is seriously wrong
+   * (e.g. a JFlex bug producing a faulty scanner etc.).
+   *
+   * Usual syntax/scanner level error handling should be done
+   * in error fallback rules.
+   *
+   * @param   errorCode  the code of the errormessage to display
+   */
+  private void zzScanError(int errorCode) {
+    String message;
+    try {
+      message = ZZ_ERROR_MSG[errorCode];
+    }
+    catch (ArrayIndexOutOfBoundsException e) {
+      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+    }
+
+    throw new Error(message);
+  } 
+
+
+  /**
+   * Pushes the specified amount of characters back into the input stream.
+   *
+   * They will be read again by then next call of the scanning method
+   *
+   * @param number  the number of characters to be read again.
+   *                This number must not be greater than yylength()!
+   */
+  public void yypushback(int number)  {
+    if ( number > yylength() )
+      zzScanError(ZZ_PUSHBACK_2BIG);
+
+    zzMarkedPos -= number;
+  }
+
+
+  /**
+   * Contains user EOF-code, which will be executed exactly once,
+   * when the end of file is reached
+   */
+  private void zzDoEOF() throws java.io.IOException {
+    if (!zzEOFDone) {
+      zzEOFDone = true;
+      yyclose();
+    }
+  }
+
+
+  /**
+   * Resumes scanning until the next regular expression is matched,
+   * the end of input is encountered or an I/O-Error occurs.
+   *
+   * @return      the next token
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  public java_cup.runtime.Symbol next_token() throws java.io.IOException, Exception {
+    int zzInput;
+    int zzAction;
+
+    // cached fields:
+    int zzCurrentPosL;
+    int zzMarkedPosL;
+    int zzEndReadL = zzEndRead;
+    char [] zzBufferL = zzBuffer;
+    char [] zzCMapL = ZZ_CMAP;
+
+    int [] zzTransL = ZZ_TRANS;
+    int [] zzRowMapL = ZZ_ROWMAP;
+    int [] zzAttrL = ZZ_ATTRIBUTE;
+
+    while (true) {
+      zzMarkedPosL = zzMarkedPos;
+
+      zzAction = -1;
+
+      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+  
+      zzState = ZZ_LEXSTATE[zzLexicalState];
+
+
+      zzForAction: {
+        while (true) {
+    
+          if (zzCurrentPosL < zzEndReadL)
+            zzInput = zzBufferL[zzCurrentPosL++];
+          else if (zzAtEOF) {
+            zzInput = YYEOF;
+            break zzForAction;
+          }
+          else {
+            // store back cached positions
+            zzCurrentPos  = zzCurrentPosL;
+            zzMarkedPos   = zzMarkedPosL;
+            boolean eof = zzRefill();
+            // get translated positions and possibly new buffer
+            zzCurrentPosL  = zzCurrentPos;
+            zzMarkedPosL   = zzMarkedPos;
+            zzBufferL      = zzBuffer;
+            zzEndReadL     = zzEndRead;
+            if (eof) {
+              zzInput = YYEOF;
+              break zzForAction;
+            }
+            else {
+              zzInput = zzBufferL[zzCurrentPosL++];
+            }
+          }
+          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+          if (zzNext == -1) break zzForAction;
+          zzState = zzNext;
+
+          int zzAttributes = zzAttrL[zzState];
+          if ( (zzAttributes & 1) == 1 ) {
+            zzAction = zzState;
+            zzMarkedPosL = zzCurrentPosL;
+            if ( (zzAttributes & 8) == 8 ) break zzForAction;
+          }
+
+        }
+      }
+
+      // store back cached position
+      zzMarkedPos = zzMarkedPosL;
+
+      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+        case 16: 
+          { return new Symbol(Avatar2SysMLSymbols.AND);
+          }
+        case 24: break;
+        case 10: 
+          { return new Symbol(Avatar2SysMLSymbols.NOT);
+          }
+        case 25: break;
+        case 3: 
+          { try { return new Symbol(Avatar2SysMLSymbols.CONSTANT, "" + Integer.parseInt(yytext()));}
+                  catch (NumberFormatException nfe) { throw new Exception ("Lexer : Integer Format : " + yytext()); }
+          }
+        case 26: break;
+        case 8: 
+          { return new Symbol(Avatar2SysMLSymbols.DIV);
+          }
+        case 27: break;
+        case 4: 
+          { return new Symbol(Avatar2SysMLSymbols.IDENT, yytext());
+          }
+        case 28: break;
+        case 2: 
+          { break;
+          }
+        case 29: break;
+        case 18: 
+          { return new Symbol(Avatar2SysMLSymbols.DIF);
+          }
+        case 30: break;
+        case 23: 
+          { return new Symbol(Avatar2SysMLSymbols.CONSTANT, "false");
+          }
+        case 31: break;
+        case 11: 
+          { return new Symbol(Avatar2SysMLSymbols.LT);
+          }
+        case 32: break;
+        case 15: 
+          { return new Symbol(Avatar2SysMLSymbols.COMMA);
+          }
+        case 33: break;
+        case 5: 
+          { return new Symbol(Avatar2SysMLSymbols.PLUS);
+          }
+        case 34: break;
+        case 12: 
+          { return new Symbol(Avatar2SysMLSymbols.GT);
+          }
+        case 35: break;
+        case 21: 
+          { return new Symbol(Avatar2SysMLSymbols.GEQ);
+          }
+        case 36: break;
+        case 9: 
+          { return new Symbol(Avatar2SysMLSymbols.MOD);
+          }
+        case 37: break;
+        case 19: 
+          { return new Symbol(Avatar2SysMLSymbols.EQ);
+          }
+        case 38: break;
+        case 14: 
+          { return new Symbol(Avatar2SysMLSymbols.RPAR);
+          }
+        case 39: break;
+        case 17: 
+          { return new Symbol(Avatar2SysMLSymbols.OR);
+          }
+        case 40: break;
+        case 20: 
+          { return new Symbol(Avatar2SysMLSymbols.LEQ);
+          }
+        case 41: break;
+        case 1: 
+          { throw new Exception ("Unknown character in  expression");
+          }
+        case 42: break;
+        case 6: 
+          { return new Symbol(Avatar2SysMLSymbols.MINUS);
+          }
+        case 43: break;
+        case 22: 
+          { return new Symbol(Avatar2SysMLSymbols.CONSTANT, "true");
+          }
+        case 44: break;
+        case 7: 
+          { return new Symbol(Avatar2SysMLSymbols.MULT);
+          }
+        case 45: break;
+        case 13: 
+          { return new Symbol(Avatar2SysMLSymbols.LPAR);
+          }
+        case 46: break;
+        default: 
+          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+            zzAtEOF = true;
+            zzDoEOF();
+              {    return new java_cup.runtime.Symbol(Avatar2SysMLSymbols.EOF);
+ }
+          } 
+          else {
+            zzScanError(ZZ_NO_MATCH);
+          }
+      }
+    }
+  }
+
+
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
new file mode 100644
index 0000000000000000000000000000000000000000..7197b7e6fc9fafa23d8be8cd11bbfa3a5ba681eb
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
@@ -0,0 +1,209 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+/**
+ * Class Avatar2SysMLNames
+ * Creation: 20/06/2024
+ *
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ */
+package avatartranslator.tosysmlv2;
+import java_cup.runtime.ComplexSymbolFactory;
+
+import java.io.StringReader;
+import java.util.List;
+
+/**
+ * Class Avatar2SysMLNames
+ * Creation: 20/06/2024
+ *
+ * Generation of SysML idents from Avatar names.
+ *
+ * <p> This ensures that the identifiers used in the Avatar Model don't clash
+ * with the SysML keywords or some fieldName in the used SysML libraries.
+ * The parsing of AvatarFromSysML recovers the original Avatar names from these identifiers.
+ * "name" parameters for these name generators are intended to be the original Avatar names.
+ * Except for attributes, all the parameter names are short names (Avatar names without ".").
+ * </p>
+ * <p> Some name generators require an integer as last parameter. This parameter is used to be
+ * able to produce different identifiers for the same values of the other parameters</p>
+ *
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ */
+public class Avatar2SysMLNames {
+    /** type of synchroneous communications */
+    public final static int SYNC = 0;
+    /** type of blocking-fifo communications */
+    public final static int BFIFO = 1;
+    /** type of non-blocking-fifo communications */
+    public final static int NBFIFO = 2;
+
+
+    public static String dataTypeSysMLname(String name){ return "'@dt:" + name.trim() + "'"; }
+
+    public static String blockSysMLname(String name){ return "'@blk:" + name.trim() + "'"; }
+
+    /** attribute names may be chained using "." as separator */
+    public static String attributeSysMLname(String _name){
+        if (_name == null) return null;
+        String name = _name.trim();
+        String[] list = name.split("\\.");
+        StringBuffer result =
+                ( list.length == 0 ? new StringBuffer("'$" + name + "'") : new StringBuffer("'$" + list[0] + "'"));
+        int length = list.length;
+        for(int i = 1; i < length; i++)
+            result.append(".'" + list[i] + "'");
+        return result.toString();
+    }
+
+    /** specific... as SysML requires a "::" as first separator (instead of ".") for variable assignment */
+    public static String leftHandSysMLname(String name){
+        String aname = attributeSysMLname(name);
+        int found = aname.indexOf("'.'");
+        if (found == -1) return aname;
+        else return (
+                aname.substring(0,found) + "'::'" + aname.substring(found+3)
+                );
+    }
+    /** Note: method name are similar to attribute name (do not change, code rely on this) */
+    public static String methodSysMLname(String name){ return "'$" + name.trim() + "'"; }
+
+    public static String fieldSysMLname(String name){ return "'" + name.trim() + "'"; }
+
+    /** Relation names contain information about the kind of communication.
+     *
+     * @param b1 bloc name
+     * @param b2 bloc name
+     * @param type among SYNC, FIFO and NBFIFO
+     */
+    public static String relationSysMLname(String b1, String b2, int type, int n){
+        if (type == NBFIFO) return "'@NBF" + n + ":" + b1.trim() + "-" + b2.trim() + "'";
+        if (type == BFIFO) return "'@BF" + n + ":" + b1.trim() + "-" + b2.trim() + "'";
+        if (type == SYNC) return "'@SYN" + n + ":" + b1.trim() + "-" + b2.trim() + "'";
+        return "";
+    }
+
+    /** channelNames are informative substrings of channelSysMLNames.
+     *
+     * a channel connects two signals s1 and s2 belonging respectively to blocs b1 and b2
+     *
+     * @param out2in must be true if s1 is an output signal
+     */
+    public static String channelName(String b1, String b2, String s1, String s2, boolean out2in){
+        if(out2in) return b1.trim() + "." + s1.trim() + ">" + b2.trim() + "." + s2.trim();
+        else return b1.trim() + "." + s1.trim() + "<" + b2.trim() + "." + s2.trim();
+    }
+
+    public static String signalSysMLname(String _name){ return "'@sig:" + _name + "'"; }
+
+    /** Channel SysML names contain information about the kind of communication.
+     *
+     * @param type among SYNC, FIFO and NBFIFO
+     */
+    public static String channelSysMLname(String _signalname, int type){
+        if (type == NBFIFO) return "'@nbf:" + _signalname.trim() + "'";
+        if (type == BFIFO) return "'@bf:" + _signalname.trim() + "'";
+        if (type == SYNC) return "'@syn:" + _signalname.trim() + "'";
+        return "";
+    }
+
+    /** messages denote structures that are signal profiles */
+    public static String messageSysMLname(String _blockname, String _signalsname){
+        return "'@MSG:" + _blockname.trim() + "." + _signalsname.trim() + "'";
+    }
+
+    public static String startStateSysMLname(){ return "'@st:start'"; }
+
+    public static String stopStateSysMLname(){ return "'@st:stop'"; }
+
+    /** associated to AvatarStates */
+    public static String standardStateSysMLname(String name){ return "'@st:standard." + name.trim() + "'"; }
+
+    /** associated to AvatarRandoms */
+    public static String randomStateSysMLname(int number){ return "'@st:random." + number + "'"; }
+
+    /** associated to QueriesOnSignal */
+    public static String countStateSysMLname(String sigName, int number){ return "'@st:count." + sigName.trim() + "." + number + "'"; }
+
+    /** associated to sending AvatarActionOnSignal */
+    public static String sendStateSysMLname(String sigName, int number){ return "'@st:send." + sigName.trim() + "." + number + "'"; }
+
+    /** associated to receiving AvatarActionOnSignal */
+    public static String receiveStateSysMLname(String sigName, int number){ return "'@st:receive." + sigName.trim() + "." + number + "'"; }
+
+    /** (technical) added states before some sending AvatarActionOnSignal */
+    public static String presendStateSysMLname(String sigName, int number){ return "'@st:presend." + sigName.trim() + "." + number + "'"; }
+
+    /** (technical) added states before some receiving AvatarActionOnSignal */
+    public static String prereceiveStateSysMLname(String sigName, int number){ return "'@st:prereceive." + sigName.trim() + "." + number + "'"; }
+
+    /** associated to AvatarSetTimer */
+    public static String setTimerStateSysMLname(String timerName, int number){ return "'@st:set." + timerName.trim() + "." + number + "'"; }
+
+    /** associated to AvatarResetTimer */
+    public static String resetTimerStateSysMLname(String timerName, int number){ return "'@st:reset." + timerName.trim() + "." + number + "'"; }
+
+    /** associated to AvatarExpireTimer */
+    public static String expireTimerStateSysMLname(String timerName, int number){ return "'@st:expire." + timerName.trim() + "." + number + "'"; }
+
+    /** (technical) added states before some AvatarSetTimer */
+    public static String presetTimerStateSysMLname(String timerName, int number){ return "'@st:preset." + timerName.trim() + "." + number + "'"; }
+
+    /** (technical) added states before some AvatarResetTimer */
+    public static String preresetTimerStateSysMLname(String timerName, int number){ return "'@st:prereset." + timerName.trim() + "." + number + "'"; }
+
+    /** (technical) added states before some AvatarExpireTimer */
+    public static String preexpireTimerStateSysMLname(String timerName, int number){ return "'@st:preexpire." + timerName.trim() + "." + number + "'"; }
+
+    /** associated to Avatar timers (represented by blocks) */
+    public static String timerBlockSysMLname(String timerName){ return "'@tmr:" + timerName.trim() + "'"; }
+
+    /** convert an Avatar int/bool expression into a SysML expression */
+    public static String expr2SysML(String _expr) {
+        Avatar2SysMLParser parser = new Avatar2SysMLParser(new Avatar2SysMLLexer(new StringReader (_expr)));
+        try {
+            String res = (String)parser.parse().value;
+            return res;
+        }
+        catch (java.lang.Exception e) {
+            e.printStackTrace();
+            return ""; }
+    }
+}
+
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLParser.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a73d9644e807fbb6632047c505a1f954076dfe9
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLParser.java
@@ -0,0 +1,578 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.11b 20210814 (GIT d69c832)
+//----------------------------------------------------
+
+package avatartranslator.tosysmlv2;
+
+import java_cup.runtime.*;
+import  static avatartranslator.tosysmlv2.Avatar2SysMLNames.*;
+import java_cup.runtime.XMLElement;
+
+/** CUP v0.11b 20210814 (GIT d69c832) generated parser.
+  */
+@SuppressWarnings("unused")
+public class Avatar2SysMLParser extends java_cup.runtime.lr_parser {
+
+ @Override
+ public final Class<?> getSymbolContainer() {
+    return Avatar2SysMLSymbols.class;
+}
+
+  /** Default constructor. */
+  @Deprecated
+  public Avatar2SysMLParser() {super();}
+
+  /** Constructor which sets the default scanner. */
+  @Deprecated
+  public Avatar2SysMLParser(java_cup.runtime.Scanner s) {super(s);}
+
+  /** Constructor which sets the default scanner. */
+  public Avatar2SysMLParser(java_cup.runtime.Scanner s, java_cup.runtime.SymbolFactory sf) {super(s,sf);}
+
+  /** Production table. */
+  protected static final short _production_table[][] = 
+    unpackFromStrings(new String[] {
+    "\000\027\000\002\002\005\000\002\002\004\000\002\002" +
+    "\005\000\002\002\005\000\002\002\005\000\002\002\005" +
+    "\000\002\002\004\000\002\002\005\000\002\002\005\000" +
+    "\002\002\004\000\002\002\005\000\002\002\005\000\002" +
+    "\002\005\000\002\002\005\000\002\002\005\000\002\002" +
+    "\005\000\002\002\005\000\002\002\005\000\002\002\006" +
+    "\000\002\002\003\000\002\002\003\000\002\003\003\000" +
+    "\002\003\005" });
+
+  /** Access to production table. */
+  @Override
+  public short[][] production_table() {return _production_table;}
+
+  /** Parse-action table. */
+  protected static final short[][] _action_table = 
+    unpackFromStrings(new String[] {
+    "\000\055\000\014\005\007\021\005\022\006\026\010\027" +
+    "\004\001\002\000\042\002\uffee\004\uffee\005\uffee\006\uffee" +
+    "\007\uffee\010\uffee\011\uffee\012\uffee\013\uffee\014\uffee\015" +
+    "\uffee\016\uffee\017\uffee\020\uffee\023\uffee\025\uffee\001\002" +
+    "\000\014\005\007\021\005\022\006\026\010\027\004\001" +
+    "\002\000\014\005\007\021\005\022\006\026\010\027\004" +
+    "\001\002\000\014\005\007\021\005\022\006\026\010\027" +
+    "\004\001\002\000\044\002\uffed\004\uffed\005\uffed\006\uffed" +
+    "\007\uffed\010\uffed\011\uffed\012\uffed\013\uffed\014\uffed\015" +
+    "\uffed\016\uffed\017\uffed\020\uffed\022\045\023\uffed\025\uffed" +
+    "\001\002\000\036\002\020\004\017\005\012\006\014\007" +
+    "\022\010\015\011\013\012\026\013\021\014\016\015\025" +
+    "\016\023\017\027\020\024\001\002\000\014\005\007\021" +
+    "\005\022\006\026\010\027\004\001\002\000\014\005\007" +
+    "\021\005\022\006\026\010\027\004\001\002\000\014\005" +
+    "\007\021\005\022\006\026\010\027\004\001\002\000\014" +
+    "\005\007\021\005\022\006\026\010\027\004\001\002\000" +
+    "\014\005\007\021\005\022\006\026\010\027\004\001\002" +
+    "\000\014\005\007\021\005\022\006\026\010\027\004\001" +
+    "\002\000\004\002\000\001\002\000\014\005\007\021\005" +
+    "\022\006\026\010\027\004\001\002\000\014\005\007\021" +
+    "\005\022\006\026\010\027\004\001\002\000\014\005\007" +
+    "\021\005\022\006\026\010\027\004\001\002\000\014\005" +
+    "\007\021\005\022\006\026\010\027\004\001\002\000\014" +
+    "\005\007\021\005\022\006\026\010\027\004\001\002\000" +
+    "\014\005\007\021\005\022\006\026\010\027\004\001\002" +
+    "\000\014\005\007\021\005\022\006\026\010\027\004\001" +
+    "\002\000\032\002\ufff5\004\017\005\012\006\014\007\022" +
+    "\010\015\011\ufff5\012\ufff5\013\ufff5\014\ufff5\023\ufff5\025" +
+    "\ufff5\001\002\000\042\002\ufffa\004\017\005\012\006\014" +
+    "\007\022\010\015\011\013\012\ufffa\013\021\014\016\015" +
+    "\025\016\023\017\027\020\024\023\ufffa\025\ufffa\001\002" +
+    "\000\032\002\ufff7\004\017\005\012\006\014\007\022\010" +
+    "\015\011\ufff7\012\ufff7\013\ufff7\014\ufff7\023\ufff7\025\ufff7" +
+    "\001\002\000\032\002\ufff4\004\017\005\012\006\014\007" +
+    "\022\010\015\011\ufff4\012\ufff4\013\ufff4\014\ufff4\023\ufff4" +
+    "\025\ufff4\001\002\000\032\002\ufff6\004\017\005\012\006" +
+    "\014\007\022\010\015\011\ufff6\012\ufff6\013\ufff6\014\ufff6" +
+    "\023\ufff6\025\ufff6\001\002\000\042\002\ufffd\004\ufffd\005" +
+    "\ufffd\006\ufffd\007\ufffd\010\ufffd\011\ufffd\012\ufffd\013\ufffd" +
+    "\014\ufffd\015\ufffd\016\ufffd\017\ufffd\020\ufffd\023\ufffd\025" +
+    "\ufffd\001\002\000\042\002\ufff3\004\017\005\012\006\014" +
+    "\007\022\010\015\011\ufff3\012\ufff3\013\ufff3\014\ufff3\015" +
+    "\025\016\023\017\027\020\024\023\ufff3\025\ufff3\001\002" +
+    "\000\042\002\001\004\001\005\001\006\014\007\022\010" +
+    "\015\011\001\012\001\013\001\014\001\015\001\016\001" +
+    "\017\001\020\001\023\001\025\001\001\002\000\042\002" +
+    "\ufff2\004\017\005\012\006\014\007\022\010\015\011\ufff2" +
+    "\012\ufff2\013\ufff2\014\ufff2\015\025\016\023\017\027\020" +
+    "\024\023\ufff2\025\ufff2\001\002\000\042\002\ufffc\004\ufffc" +
+    "\005\ufffc\006\ufffc\007\ufffc\010\ufffc\011\ufffc\012\ufffc\013" +
+    "\ufffc\014\ufffc\015\ufffc\016\ufffc\017\ufffc\020\ufffc\023\ufffc" +
+    "\025\ufffc\001\002\000\042\002\ufffe\004\ufffe\005\ufffe\006" +
+    "\ufffe\007\ufffe\010\ufffe\011\ufffe\012\ufffe\013\ufffe\014\ufffe" +
+    "\015\ufffe\016\ufffe\017\ufffe\020\ufffe\023\ufffe\025\ufffe\001" +
+    "\002\000\042\002\ufff9\004\017\005\012\006\014\007\022" +
+    "\010\015\011\ufff9\012\ufff9\013\021\014\016\015\025\016" +
+    "\023\017\027\020\024\023\ufff9\025\ufff9\001\002\000\042" +
+    "\002\uffff\004\uffff\005\uffff\006\014\007\022\010\015\011" +
+    "\uffff\012\uffff\013\uffff\014\uffff\015\uffff\016\uffff\017\uffff" +
+    "\020\uffff\023\uffff\025\uffff\001\002\000\016\005\007\021" +
+    "\005\022\006\023\050\026\010\027\004\001\002\000\004" +
+    "\023\053\001\002\000\040\004\017\005\012\006\014\007" +
+    "\022\010\015\011\013\012\026\013\021\014\016\015\025" +
+    "\016\023\017\027\020\024\023\uffec\025\051\001\002\000" +
+    "\042\002\ufff0\004\ufff0\005\ufff0\006\ufff0\007\ufff0\010\ufff0" +
+    "\011\ufff0\012\ufff0\013\ufff0\014\ufff0\015\ufff0\016\ufff0\017" +
+    "\ufff0\020\ufff0\023\ufff0\025\ufff0\001\002\000\014\005\007" +
+    "\021\005\022\006\026\010\027\004\001\002\000\004\023" +
+    "\uffeb\001\002\000\042\002\uffef\004\uffef\005\uffef\006\uffef" +
+    "\007\uffef\010\uffef\011\uffef\012\uffef\013\uffef\014\uffef\015" +
+    "\uffef\016\uffef\017\uffef\020\uffef\023\uffef\025\uffef\001\002" +
+    "\000\042\002\ufffb\004\ufffb\005\ufffb\006\ufffb\007\ufffb\010" +
+    "\ufffb\011\ufffb\012\ufffb\013\ufffb\014\ufffb\015\ufffb\016\ufffb" +
+    "\017\ufffb\020\ufffb\023\ufffb\025\ufffb\001\002\000\036\004" +
+    "\017\005\012\006\014\007\022\010\015\011\013\012\026" +
+    "\013\021\014\016\015\025\016\023\017\027\020\024\023" +
+    "\056\001\002\000\042\002\ufff1\004\ufff1\005\ufff1\006\ufff1" +
+    "\007\ufff1\010\ufff1\011\ufff1\012\ufff1\013\ufff1\014\ufff1\015" +
+    "\ufff1\016\ufff1\017\ufff1\020\ufff1\023\ufff1\025\ufff1\001\002" +
+    "\000\042\002\ufff8\004\017\005\012\006\014\007\022\010" +
+    "\015\011\ufff8\012\ufff8\013\021\014\016\015\025\016\023" +
+    "\017\027\020\024\023\ufff8\025\ufff8\001\002" });
+
+  /** Access to parse-action table. */
+  @Override
+  public short[][] action_table() {return _action_table;}
+
+  /** <code>reduce_goto</code> table. */
+  protected static final short[][] _reduce_table = 
+    unpackFromStrings(new String[] {
+    "\000\055\000\004\002\010\001\001\000\002\001\001\000" +
+    "\004\002\056\001\001\000\004\002\054\001\001\000\004" +
+    "\002\053\001\001\000\002\001\001\000\002\001\001\000" +
+    "\004\002\043\001\001\000\004\002\042\001\001\000\004" +
+    "\002\041\001\001\000\004\002\040\001\001\000\004\002" +
+    "\037\001\001\000\004\002\036\001\001\000\002\001\001" +
+    "\000\004\002\035\001\001\000\004\002\034\001\001\000" +
+    "\004\002\033\001\001\000\004\002\032\001\001\000\004" +
+    "\002\031\001\001\000\004\002\030\001\001\000\004\002" +
+    "\027\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\006\002\046\003\045\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\006\002" +
+    "\046\003\051\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001" });
+
+  /** Access to <code>reduce_goto</code> table. */
+  @Override
+  public short[][] reduce_table() {return _reduce_table;}
+
+  /** Instance of action encapsulation class. */
+  protected CUP$Avatar2SysMLParser$actions action_obj;
+
+  /** Action encapsulation object initializer. */
+  @Override
+  protected void init_actions()
+    {
+      action_obj = new CUP$Avatar2SysMLParser$actions(this);
+    }
+
+  /** Invoke a user supplied parse action. */
+  @Override
+  public java_cup.runtime.Symbol do_action(
+    int                        act_num,
+    java_cup.runtime.lr_parser parser,
+    java.util.Stack<java_cup.runtime.Symbol>    stack,
+    int                        top)
+    throws java.lang.Exception
+  {
+    /* call code in generated class */
+    return action_obj.CUP$Avatar2SysMLParser$do_action(act_num, parser, stack, top);
+  }
+
+  /** Indicates start state. */
+  @Override
+  public int start_state() {return 0;}
+  /** Indicates start production. */
+  @Override
+  public int start_production() {return 1;}
+
+  /** <code>EOF</code> Symbol index. */
+  @Override
+  public int EOF_sym() {return 0;}
+
+  /** <code>error</code> Symbol index. */
+  @Override
+  public int error_sym() {return 1;}
+
+
+
+
+
+/** Cup generated class to encapsulate user supplied action code.*/
+class CUP$Avatar2SysMLParser$actions {
+  private final Avatar2SysMLParser parser;
+
+  /** Constructor */
+  CUP$Avatar2SysMLParser$actions(Avatar2SysMLParser parser) {
+    this.parser = parser;
+  }
+
+  /** Method 0 with the actual generated action code for actions 0 to 300. */
+  public final java_cup.runtime.Symbol CUP$Avatar2SysMLParser$do_action_part00000000(
+    int                        CUP$Avatar2SysMLParser$act_num,
+    java_cup.runtime.lr_parser CUP$Avatar2SysMLParser$parser,
+    java.util.Stack<java_cup.runtime.Symbol>    CUP$Avatar2SysMLParser$stack,
+    int                        CUP$Avatar2SysMLParser$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$Avatar2SysMLParser$result;
+
+      /* select the action based on the action number */
+      switch (CUP$Avatar2SysMLParser$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 0: // expr ::= expr PLUS expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " + " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 1: // $START ::= expr EOF 
+            {
+              Object RESULT =null;
+		int start_valleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1)).left;
+		int start_valright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1)).right;
+		String start_val = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1).<String>value();
+		RESULT = start_val;
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("$START",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          /* ACCEPT */
+          CUP$Avatar2SysMLParser$parser.done_parsing();
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 2: // expr ::= expr MINUS expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " - " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 3: // expr ::= expr MULT expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " * " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 4: // expr ::= expr DIV expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " / " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 5: // expr ::= expr MOD expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " % " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 6: // expr ::= MINUS expr 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String e = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = "-" + e; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 7: // expr ::= expr OR expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " or " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 8: // expr ::= expr AND expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " and " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 9: // expr ::= NOT expr 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String e = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = "not " + e; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 10: // expr ::= expr LT expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " < " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 11: // expr ::= expr GT expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " > " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 12: // expr ::= expr LEQ expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " <= " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 13: // expr ::= expr GEQ expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " >= " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 14: // expr ::= expr EQ expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " == " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 15: // expr ::= expr DIF expr 
+            {
+              String RESULT =null;
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int rleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int rright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String r = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = l + " != " + r; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 16: // expr ::= LPAR expr RPAR 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1)).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1)).right;
+		String e = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1).<String>value();
+		 RESULT = "(" + e + ")"; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 17: // expr ::= IDENT LPAR RPAR 
+            {
+              String RESULT =null;
+		int ileft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int iright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String i = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		 RESULT = methodSysMLname(i) + "()"; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 18: // expr ::= IDENT LPAR exprlist RPAR 
+            {
+              String RESULT =null;
+		int ileft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-3)).left;
+		int iright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-3)).right;
+		String i = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-3).<String>value();
+		int lleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1)).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1)).right;
+		String l = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-1).<String>value();
+		 RESULT = methodSysMLname(i) + "(" + l + ")"; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-3), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 19: // expr ::= CONSTANT 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String e = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = e; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.peek(), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 20: // expr ::= IDENT 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String e = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = attributeSysMLname(e); 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("expr",0, CUP$Avatar2SysMLParser$stack.peek(), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 21: // exprlist ::= expr 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String e = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = e; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("exprlist",1, CUP$Avatar2SysMLParser$stack.peek(), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 22: // exprlist ::= expr COMMA exprlist 
+            {
+              String RESULT =null;
+		int eleft = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).left;
+		int eright = (CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2)).right;
+		String e = CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2).<String>value();
+		int lleft = (CUP$Avatar2SysMLParser$stack.peek()).left;
+		int lright = (CUP$Avatar2SysMLParser$stack.peek()).right;
+		String l = CUP$Avatar2SysMLParser$stack.peek().<String>value();
+		 RESULT = e + ", " + l; 
+              CUP$Avatar2SysMLParser$result = parser.getSymbolFactory().newSymbol("exprlist",1, CUP$Avatar2SysMLParser$stack.elementAt(CUP$Avatar2SysMLParser$top-2), CUP$Avatar2SysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$Avatar2SysMLParser$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number "+CUP$Avatar2SysMLParser$act_num+"found in internal parse table");
+
+        }
+    } /* end of method */
+
+  /** Method splitting the generated action code into several parts. */
+  public final java_cup.runtime.Symbol CUP$Avatar2SysMLParser$do_action(
+    int                        CUP$Avatar2SysMLParser$act_num,
+    java_cup.runtime.lr_parser CUP$Avatar2SysMLParser$parser,
+    java.util.Stack<java_cup.runtime.Symbol>     CUP$Avatar2SysMLParser$stack,
+    int                        CUP$Avatar2SysMLParser$top)
+    throws java.lang.Exception
+    {
+              return CUP$Avatar2SysMLParser$do_action_part00000000(
+                               CUP$Avatar2SysMLParser$act_num,
+                               CUP$Avatar2SysMLParser$parser,
+                               CUP$Avatar2SysMLParser$stack,
+                               CUP$Avatar2SysMLParser$top);
+    }
+}
+
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLSymbols.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLSymbols.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad94b26ae42c286537485ed80a22f6064e5a387f
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLSymbols.java
@@ -0,0 +1,62 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.11b 20210814 (GIT d69c832)
+//----------------------------------------------------
+
+package avatartranslator.tosysmlv2;
+
+/** CUP generated class containing symbol constants. */
+public class Avatar2SysMLSymbols {
+  /* terminals */
+  public static final int GEQ = 14;
+  public static final int MOD = 6;
+  public static final int AND = 7;
+  public static final int LT = 11;
+  public static final int IDENT = 20;
+  public static final int PLUS = 2;
+  public static final int OR = 8;
+  public static final int CONSTANT = 21;
+  public static final int NOT = 15;
+  public static final int GT = 12;
+  public static final int COMMA = 19;
+  public static final int EOF = 0;
+  public static final int MULT = 4;
+  public static final int DIV = 5;
+  public static final int MINUS = 3;
+  public static final int error = 1;
+  public static final int EQ = 9;
+  public static final int LEQ = 13;
+  public static final int RPAR = 17;
+  public static final int LPAR = 16;
+  public static final int DIF = 10;
+  public static final int UMINUS = 18;
+  public static final String[] terminalNames = new String[] {
+  "EOF",
+  "error",
+  "PLUS",
+  "MINUS",
+  "MULT",
+  "DIV",
+  "MOD",
+  "AND",
+  "OR",
+  "EQ",
+  "DIF",
+  "LT",
+  "GT",
+  "LEQ",
+  "GEQ",
+  "NOT",
+  "LPAR",
+  "RPAR",
+  "UMINUS",
+  "COMMA",
+  "IDENT",
+  "CONSTANT"
+  };
+
+  /* non terminals */
+  static final int exprlist = 1;
+  static final int expr = 0;
+}
+
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
new file mode 100644
index 0000000000000000000000000000000000000000..62c4b1fd727add0fde8d63d1a419107ebc089c65
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
@@ -0,0 +1,1454 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+/**
+ * Class AvatarFromSysML
+ * Creation: 20/06/2024
+ *
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ */
+package avatartranslator.tosysmlv2;
+
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.function.BiConsumer;
+
+import avatartranslator.*;
+import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*;
+import static java_cup.runtime.ComplexSymbolFactory.*;
+import java_cup.runtime.ComplexSymbolFactory;
+import myutil.TraceManager;
+
+import static java.lang.System.out;
+import static avatartranslator.AvatarTransition.*;
+
+/** Class AvatarFromSysML
+ * Creation: 20/06/2024
+ *
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ *
+ * Building Avatar Models from Their SysML V2 description. This Class exports the main function that does this. Technically,
+ * the class implements the last step of this process, i.e. it builds Avatar models from abstract syntax trees build by AvatarSysMLParser.
+ */
+public class AvatarFromSysML {
+    /** the build Avatar specification, returned at the end of the building process */
+    private AvatarSpecification avSpec;
+    /** the source abstract syntax tree, obtained through a call to the parser */
+    private StxModel stxSpec;
+    /** maps signal syntactic elements to their associated avatar signal by the building process */
+    private HashMap<StxSignal, AvatarSignal> signalMap;
+    /** maps block syntactic elements to their associated avatar block by the building process */
+    private HashMap<StxBlock, AvatarBlock> blockMap;
+    /** maps state syntactic elements to their associated avatar state-machine element by the building process (when exists) */
+    private HashMap<StxState, AvatarStateMachineElement> stateMap;
+    /** maps Avatar state-machine elements to their associated set of incoming transitions and their block.
+     * <p>filled while handling blocks. Used thereafter to check some well-formedness constraints such as reachability... </p> */
+    private HashMap<AvatarStateMachineElement, StateTransitions> transitionMap;
+    /** maps Avatar datatypes extracted from the SysML sourse to their sequence of primitive fields */
+    private HashMap<AvatarDataType, AvatarDataTypePrimitiveFields> primitiveFieldsMap;
+    /** all errors encountered while parsing and building model from parsing-returned abstract syntax tree */
+    private List<AvatarFromSysMLError> errors;
+
+    public AvatarFromSysML(){
+        avSpec = null;
+        stxSpec = null;
+        signalMap = new HashMap<StxSignal, AvatarSignal>();
+        blockMap = new HashMap<StxBlock, AvatarBlock>();
+        stateMap = new HashMap<StxState, AvatarStateMachineElement>();
+        transitionMap = new HashMap<AvatarStateMachineElement, StateTransitions>();
+        errors = null;
+    }
+
+    /** register an error encountered while parsing and building model from parsing-returned abstract syntax tree */
+    private void addError(AvatarFromSysMLError _err) { errors.add(_err); }
+
+    /** to memorize the set of transitions of a state and memorize its block with them */
+    private class StateTransitions {
+        private AvatarBlock block;
+        private List<AvatarTransition> transitions;
+        public StateTransitions (AvatarBlock _block, List<AvatarTransition> _transitions) {
+            block = _block;
+            transitions = _transitions;
+        }
+        public AvatarBlock getBlock() { return block; }
+        public List<AvatarTransition> getTransitions() { return transitions; }
+    }
+
+    /** Builds an Avatar Specification from an Avatar SysML V2 description provided in a file.
+     *  If errors are found, they are printed using TraceManager.addDev before returning
+     */
+    public AvatarSpecification sysMLtoSpec(String _fileName) {
+
+        // Initialize parser
+        AvatarFromSysMLParser parser;
+        try { parser =
+                new AvatarFromSysMLParser(new AvatarFromSysMLLexer(new FileReader(_fileName)),
+                        new ComplexSymbolFactory()); }
+        catch (java.lang.Exception e) {
+            e.printStackTrace(out);
+            return new AvatarSpecification("DummySpec", null);
+        }
+
+        // Run parser and get parser errors
+        TraceManager.addDev("Parsing Model");
+        try { stxSpec = parser.parseModel(); }
+        catch (java.lang.Exception e) {
+            e.printStackTrace(out);
+            return new AvatarSpecification("DummySpec", null);
+        }
+        if (stxSpec == null) {
+            for(AvatarFromSysMLError e : parser.getErrors())
+                TraceManager.addDev(e.toString());
+            return new AvatarSpecification("DummySpec", null);
+        }
+        errors = stxSpec.getErrors();
+
+        // Build Specification from parser-returned abstract syntax tree.
+        try {
+            TraceManager.addDev("Building Specification");
+            avSpec = new AvatarSpecification("FromSysMLV2_EXAMPLE_SPECIFICATION", null);
+            signalMap.clear();
+            blockMap.clear();
+            stateMap.clear();
+            TraceManager.addDev("Building DataTypes");
+            buildDataTypes();
+            TraceManager.addDev("Building Blocks");
+            buildBlocks();
+            TraceManager.addDev("Building Relations");
+            buildRelations();
+        }
+        catch (Exception ex) {
+            for(AvatarFromSysMLError e : errors)
+            TraceManager.addDev(e.toString());
+            throw ex;
+        }
+        // TODO: move error handling
+        for(AvatarFromSysMLError e : errors)
+            TraceManager.addDev(e.toString());
+
+        return avSpec;
+    }
+
+    /** initialize a state entry in the map that associates outgoing transitions to state-machine elements */
+    private void addState(AvatarStateMachineElement e, AvatarBlock b) {
+        if (transitionMap.get(e) == null){
+            ArrayList<AvatarTransition> l = new ArrayList<AvatarTransition>();
+            transitionMap.put(e, new StateTransitions(b, l));
+        }
+    }
+
+    /** add an outgoing transition to a state in the map that associates outgoing transitions to state-machine elements */
+    private void addTransition(AvatarTransition t, AvatarStateMachineElement e) {
+        transitionMap.get(e).getTransitions().add(t);
+    }
+
+    /** get the Avatar block associated to a block syntactic element. Create it if necessary (and create entry in the map) */
+    private AvatarBlock getBlock(StxBlock _b) {
+        AvatarBlock b = blockMap.get(_b);
+        if (b == null) {
+            b = new AvatarBlock(_b.getName(), avSpec, null);
+            blockMap.put(_b, b);
+        }
+        return b;
+    }
+
+    /** get the Avatar signal associated to a signal syntactic element. Create it if necessary (and create entry in the map) */
+    private AvatarSignal getSignal(StxSignal _b) {
+        AvatarSignal b = signalMap.get(_b);
+        if (b == null) {
+            if (_b.isInput())
+                b = new AvatarSignal(_b.getName(), AvatarSignal.IN, null);
+            else
+                b = new AvatarSignal(_b.getName(), AvatarSignal.OUT, null);
+            signalMap.put(_b, b);
+        }
+        return b;
+    }
+
+    /* not used...........
+    private AvatarAttribute getOriginalAttributeByName(String _name, AvatarBlock _block) {
+        List<AvatarAttribute> l = _block.getOriginalAttributes();
+        int size = l.size();
+        for (int i = 0; i < size; i++)
+            if(l.get(i).getName().equals(_name)) return  l.get(i);
+        return null;
+    }
+    */
+
+    /** get the basic attribute associated to a name (possibly with "__") in a block */
+    private AvatarAttribute getAttributeByName(String _name, AvatarBlock _block) {
+        List<AvatarAttribute> l = _block.getAttributes();
+        int size = l.size();
+        for (int i = 0; i < size; i++)
+            if(l.get(i).getName().equals(_name)) return  l.get(i);
+        return null;
+    }
+
+    /** get the basic attribute associated to a timer in a block */
+    private AvatarAttribute getTimerByName(String _name, AvatarBlock _block) {
+        AvatarAttribute res =  getAttributeByName(_name, _block);
+        if (res != null && res.getType() == AvatarType.TIMER) return res;
+        return null;
+    }
+
+    /** get the Avatar state-machine element associated to a state syntactic element. Create it if necessary (and create entry in the map)
+     *
+     * <p> The creation process may use different state-machine element constructors (sub-classes) depending on the type of
+     * the syntactic state.</p>
+     * <p> States that have been technically added (STXPRESENDSTATEs and STXPRERECEIVESTATEs) are not handled as they have no correspondant
+     * state-machine element in the Avatar Model.</p>
+     * :*/
+    private AvatarStateMachineElement getState(StxState _s, AvatarBlock _b) {
+        AvatarStateMachineElement s = stateMap.get(_s);
+        if (s == null) {
+            switch(_s.getType()) {
+                case AvatarFromSysMLSyntax.STXSTARTSTATE :
+                    s = new AvatarStartState("StartState", null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXSTANDARDSTATE :
+                    s = new AvatarState(_s.getName(), null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXRANDOMSTATE :
+                    s = new AvatarRandom(_s.getName(), null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXCOUNTSTATE :
+                    s = new AvatarQueryOnSignal(_s.getName(), getSignal(_s.getSignal()),
+                            getAttributeByName(_s.getVariable().replaceAll("\\.", "__"),_b), null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXSTOPSTATE :
+                case AvatarFromSysMLSyntax.STXSENDSTATE :
+                case AvatarFromSysMLSyntax.STXRECEIVESTATE :
+                    s = new AvatarActionOnSignal(_s.getName(), null, null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXPRESENDSTATE :
+                case AvatarFromSysMLSyntax.STXPRERECEIVESTATE :
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.BUGERROR, null,
+                            "adding precom state (AvatarFromSysML.getState)", null));
+                    break;
+                case AvatarFromSysMLSyntax.STXSETTIMERSTATE :
+                    s = new AvatarSetTimer(_s.getName(), null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXRESETTIMERSTATE :
+                    s = new AvatarResetTimer(_s.getName(), null, _b);
+                    break;
+                case AvatarFromSysMLSyntax.STXEXPIRETIMERSTATE :
+                    s = new AvatarExpireTimer(_s.getName(), null, _b);
+            }
+            if (s != null) stateMap.put(_s, s);
+        }
+        return s;
+    }
+
+    // BUILDING DATATYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    /** To be run on the (filled by parsing) maps that associates syntactic datatypes to their names
+     *
+     *  <p> This creates-and-adds-to-avSpec the AvatarDataType corresponding to the syntactic datatype. </p>
+     *  <p> datatypes associated to datatype-typed fields cannot be set as here, the complete list
+     *  of datatypes (which is required for this) is not
+     *  known. Thus this setting is delayed.</p>
+     *  <p> To make this delayed setting easier, two informations are collected while iterating on entries:</p>
+     *  <ul>
+     *      <li> a mapping of the attribute to be later completed to the name of their expected datatype </li>
+     *      <li> a mapping of the datatype names to the build AvatarDataTypes </li>
+     *  </ul>
+     * */
+    private class BuildDataType implements BiConsumer<String, StxDataType> {
+        private HashMap<String,AvatarDataType> dataTypeMap;
+        private HashMap<AvatarAttribute,String> attributeMap;
+
+        /** parameters of the constructor are the maps to fill while iterating on entries */
+        public BuildDataType(HashMap<String,AvatarDataType> _dataTypeMap, HashMap<AvatarAttribute,String> _attributeMap) {
+            dataTypeMap = _dataTypeMap;
+            attributeMap = _attributeMap;
+        }
+
+        /** create and add the datatype to avSpec. updates dataTypeMap, and attributeMap for each encountered datatype-typed field. */
+        public void accept(String n, StxDataType d) {
+            AvatarDataType dataType = new AvatarDataType(d.getName(),null);
+            avSpec.addDataType(dataType);
+            dataTypeMap.put(d.getName(), dataType);
+            int nbFields = d.getSize();
+            for (int i = 0; i < nbFields; i++) {
+                StxField f = d.getField(i);
+                String type =  f.getType();
+                AvatarAttribute aa;
+                if(type.equals("Integer"))
+                    aa = new AvatarAttribute(f.getName(),AvatarType.INTEGER,null,null);
+                else if(type.equals("Boolean"))
+                    aa = new AvatarAttribute(f.getName(),AvatarType.BOOLEAN,null,null);
+                else {
+                    aa = new AvatarAttribute(f.getName(), AvatarType.UNDEFINED, null, null);
+                    attributeMap.put(aa, type);
+                }
+                String initVal = f.getInitialValue().trim();
+                if(f.getDefaultValue() && initVal.equals(aa.getType().getDefaultInitialValue()))
+                    aa.setInitialValue("");
+                else aa.setInitialValue(initVal);
+
+                dataType.addAttribute(aa);
+            }
+        }
+    }
+
+    /** to be run on the map that maps datatype-typed datatype fields to the name of their typing datatype. Using the (to-constructor)
+     * provided map from names to Avatar datatypes, accept find the associated datatype and update the field with it. */
+    private class CompleteDataTypeAttribute implements BiConsumer<AvatarAttribute,String> {
+        HashMap<String,AvatarDataType> dataTypeMap;
+        public CompleteDataTypeAttribute(HashMap<String,AvatarDataType> _dataTypeMap) { dataTypeMap = _dataTypeMap;}
+
+        public void accept(AvatarAttribute aa, String dt) {
+            AvatarDataType adt = dataTypeMap.get(dt); // find the associated datatype
+            if (adt == null) {
+                errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, "datatype " + dt + " in datatype field " +
+                        aa.getName() + " is undefined"));
+                aa.setType(AvatarType.INTEGER); // should not be used...
+            }
+            else aa.setDataType(adt);} // update the field with it
+    }
+
+    /** fills avSpec's list of Avatar datatypes from stxSpec's list of syntactic datatypes. Then, computes and updates primitiveFieldsMap.
+     *
+     * <p> Process with two steps:</p>
+     * <ul>
+     *     <li> invoke BuildDataType to build and add the datatypes, but not set the datatype attribute of datatype-typed fields. Memorize
+     *     information to do this later </li>
+     *     <li> invoke CompleteDataTypeAttribute to do this delayed job with provided information: a mapping of these fields to the name of their
+     *     datatype type, and a mapping of these datatype names to their associated AvatarDataType structure.
+     *     </li>
+     * </ul>
+     * <p> A mapping of all datatypes to their extended list of basic fields is then computed and assigned to primitiveFieldsMap </p>
+     * <p> During this process, errors may be collected </p>
+     */
+    private void buildDataTypes(){
+        List<AvatarDataType> dtList = avSpec.getDataTypes(); // the list to fill
+        HashMap<String,AvatarDataType> dataTypeMap = new HashMap<String,AvatarDataType>();
+        HashMap<AvatarAttribute,String> attributeMap = new HashMap<AvatarAttribute,String>();
+        stxSpec.getDataTypeMap().forEach(new BuildDataType(dataTypeMap, attributeMap));
+        attributeMap.forEach(new CompleteDataTypeAttribute(dataTypeMap));
+
+        List<String> err = new ArrayList<String>();
+        primitiveFieldsMap = AvatarDataTypePrimitiveFields.buildMap(dtList, err);
+        for(String e : err) errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,e));
+    }
+
+
+    // BUILDING BLOCKS (but not statemachines) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    /** To be run on the (filled by parsing) maps that associates block names to syntactic blocks.
+     *
+     * <p> this create-and-add-to-avSpec all the corresponding AvatarBlocks and fills their static declarative part (attributes, signals, methods)
+     * but not their state-machine. Building state-machines requires the static declarations of all hierarchically containing blocks to be up to date
+     * (to find used signals) and thus is delayed after the iteration of BuildBlock.
+     * </p>
+     */
+    private class BuildBlock implements BiConsumer<String, StxBlock> {
+        public BuildBlock(){}
+        public void accept(String n, StxBlock blk) {
+            if (!blk.isDeclared()) {
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,
+                        "block " + blk.getName() +"has been used but has not been declared"));
+                return;
+            }
+
+            // create and add the block......................................
+            AvatarBlock theBlock = getBlock(blk); // create
+            avSpec.addBlock(theBlock); // add
+
+            // set father......................................
+            StxBlock fth = blk.getFather();
+            if (fth != null) theBlock.setFather(getBlock(fth));
+
+            // add Attributes......................................
+            int size = blk.getNbAttributes();
+            for (int i = 0; i < size; i++) {
+
+                StxAttribute a = blk.getAttribute(i);
+                String initVal = a.getInit().trim();
+                AvatarAttribute aa; // for original attributes
+                AvatarAttribute ax; // for extended basic attributes
+
+                if (a.getType().equals("Integer")) {
+                    aa = new AvatarAttribute(a.getName(), AvatarType.INTEGER, theBlock, null);
+                    ax = new AvatarAttribute(a.getName(), AvatarType.INTEGER, theBlock, null);
+                    if(a.getDefaultValue() && initVal.equals(AvatarType.INTEGER.getDefaultInitialValue()))
+                        initVal = "";
+                    aa.setInitialValue(initVal);
+                    ax.setInitialValue(initVal);
+                    theBlock.addAttribute(ax);
+                    ax.setAsConstant(false);
+                }
+                else if (a.getType().equals("Boolean")) {
+                    aa = new AvatarAttribute(a.getName(), AvatarType.BOOLEAN, theBlock, null);
+                    ax = new AvatarAttribute(a.getName(), AvatarType.BOOLEAN, theBlock, null);
+                    if(a.getDefaultValue() && initVal.equals(AvatarType.BOOLEAN.getDefaultInitialValue()))
+                        initVal = "";
+                    aa.setInitialValue(initVal);
+                    ax.setInitialValue(initVal);
+                    theBlock.addAttribute(ax);
+                    ax.setAsConstant(false);
+                }
+                else {
+                    aa = new AvatarAttribute(a.getName(), AvatarType.UNDEFINED, theBlock, null);
+                    AvatarDataType adt = avSpec.getDataTypeByName(a.getType());
+                    aa.setDataType(adt);
+                    String aaName =  a.getName() + "__";
+                    AvatarDataTypePrimitiveFields primitiveFields = primitiveFieldsMap.get(adt);
+                    // add basic attributes corresponding of the extension of the datatype
+                    int dtsize = primitiveFields.size();
+                    for (int j = 0; j < dtsize; j++) {
+                        ax = new AvatarAttribute(aaName + primitiveFields.getName(j),
+                                primitiveFields.getType(j), theBlock, null);
+                        theBlock.addAttribute(ax);
+                        ax.setAsConstant(false);
+                    }
+                }
+                theBlock.addOriginalAttribute(aa);
+                aa.setAsConstant(false);
+            }
+
+            // add Constants......................................
+            size = blk.getNbConstants();
+            for (int i = 0; i < size; i++) {
+                StxAttribute a = blk.getConstant(i);
+                String initVal = a.getInit().trim();
+                AvatarAttribute aa = null;
+                AvatarAttribute ax;
+                if (a.getType().equals("Integer")) {
+                    aa = new AvatarAttribute(a.getName(), AvatarType.INTEGER, theBlock, null);
+                    theBlock.addOriginalAttribute(aa);
+                    aa.setAsConstant(true);
+                    ax = new AvatarAttribute(a.getName(), AvatarType.INTEGER, theBlock, null);
+                    theBlock.addAttribute(ax);
+                    ax.setAsConstant(true);
+                    if(a.getDefaultValue() && initVal.equals(AvatarType.INTEGER.getDefaultInitialValue()))
+                        initVal = "";
+                    aa.setInitialValue(initVal);
+                    ax.setInitialValue(initVal);
+                }
+                else if (a.getType().equals("Boolean")) {
+                    aa = new AvatarAttribute(a.getName(), AvatarType.BOOLEAN, theBlock, null);
+                    theBlock.addOriginalAttribute(aa);
+                    aa.setAsConstant(true);
+                    ax = new AvatarAttribute(a.getName(), AvatarType.BOOLEAN, theBlock, null);
+                    theBlock.addAttribute(ax);
+                    ax.setAsConstant(true);
+                    if(a.getDefaultValue() && initVal.equals(AvatarType.BOOLEAN.getDefaultInitialValue()))
+                        initVal = "";
+                    aa.setInitialValue(initVal);
+                    ax.setInitialValue(initVal);
+                }
+                else
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR,
+                            a.getLeft(), "datatype for constants is not supported", null));
+            }
+
+            // add Timers......................................
+            size = blk.getNbTimers();
+            for (int i = 0; i < size; i++) {
+                AvatarAttribute aa = new AvatarAttribute(blk.getTimer(i).getName(), AvatarType.TIMER, theBlock, null);
+                theBlock.addOriginalAttribute(aa);
+                aa.setAsConstant(false);
+                aa = new AvatarAttribute(blk.getTimer(i).getName(), AvatarType.TIMER, theBlock, null);
+                theBlock.addAttribute(aa);
+                aa.setAsConstant(false);
+           }
+
+            // add Methods......................................
+            size = blk.getNbMethods();
+            for (int i = 0; i < size; i++) {
+
+                StxMethod sm = blk.getMethod(i);
+                 // create method
+                AvatarMethod am = new AvatarMethod(sm.getName(),null);
+                 // add method
+                theBlock.addMethod(am);
+                // add input parameters to method
+                buildProfile(sm, am, theBlock);
+
+                // handle return type
+                String returnType = sm.getReturnType();
+
+                if (returnType == null || returnType.length() == 0) continue; // no return type, void method
+
+                if (returnType.equals("Integer")) { // return integer
+                    am.addReturnParameter(new AvatarAttribute("return__0", AvatarType.INTEGER, theBlock, null));
+                    am.addOriginalReturnParameter(new AvatarAttribute("return__", AvatarType.INTEGER, theBlock, null));
+               }
+                else if (returnType.equals("Boolean")) { // return boolean
+                    am.addReturnParameter(new AvatarAttribute("return__0", AvatarType.BOOLEAN, theBlock, null));
+                    am.addOriginalReturnParameter(new AvatarAttribute("return__", AvatarType.BOOLEAN, theBlock, null));
+                }
+               else { // return datatype
+                    // find datatype
+                    AvatarDataType adt = avSpec.getDataTypeByName(returnType);
+                    if (adt == null)
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, sm.getLeft(),
+                                "unknown type for method return parameter", null));
+                    AvatarAttribute ret = new AvatarAttribute("return__", AvatarType.UNDEFINED, theBlock, null);
+                    // set datatype
+                    ret.setDataType(adt);
+                    am.addOriginalReturnParameter(ret);
+                    // extend datatype to a list of primitive basic fields
+                    AvatarDataTypePrimitiveFields primitiveFields = primitiveFieldsMap.get(adt);
+                    int dtsize = primitiveFields.size();
+                    for (int j = 0; j < dtsize; j++) {
+                        ret = new AvatarAttribute("return__" + j,
+                                 primitiveFields.getType(j), theBlock, null);
+                        am.addReturnParameter(ret);
+                    }
+                }
+            }
+
+            // add Signals ..............................
+            size = blk.getNbSignals();
+            for (int i = 0; i < size; i++) {
+                StxSignal ss = blk.getSignal(i);
+                AvatarSignal as = getSignal(ss); // create signal
+                if (!ss.isDeclared()) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                            "signal " + theBlock.getName() + "." + ss.getName() + " has not been declared"));
+                    continue;
+                }
+                theBlock.addSignal(as); // add signal
+                StxChannel ch = ss.getChannel();
+                if (ch == null) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                            "channel of signal " + ss.getName() + " has not been set"));
+                    continue;
+                }
+                if (!ch.isDeclared()) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                            "channel of signal " + theBlock.getName() + "." + ss.getName() + " has not been declared"));
+                    continue;
+                }
+                if (ss.isInput()) {
+                    StxInMessage im = ss.getChannel().getInProfile(); // profile is channel's in profile
+                    if (im == null) {
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                                "input profile of signal " + ss.getName() + " has not been set"));
+                        continue;
+                    }
+                    buildProfile(im, as, theBlock); // add input signal parameters
+                }
+                else {
+                    StxOutMessage om = ss.getChannel().getOutProfile(); // profile is channel's out profile
+                    if (om == null) {
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                                "output profile of signal " + ss.getName() + " has not been set"));
+                        continue;
+                    }
+                    buildProfile(om, as, theBlock); // add output signal parameters
+                }
+            }
+        }
+    }
+    /**
+     * <p></p> */
+
+    /** To be run on the maps that associates block names to syntactic blocks, after the iteration of BuildBlock (which creates AvatarBlocks
+     * and fills their static part: attributes, methods, timers, signals).
+     *
+     * <p> accept updates the AvatarBlock associated to the handled syntactic block by computing and setting its state-machine. </p>
+     */
+    private class BuildStateMachine implements BiConsumer<String, StxBlock> {
+        public BuildStateMachine(){}
+
+        /** updates the AvatarBlock associated to the handled StxBlock by computing and setting its state-machine */
+        public void accept(String n, StxBlock blk) {
+
+            AvatarBlock theBlock = getBlock(blk); // get relevant block
+            AvatarStateMachine asm = theBlock.getStateMachine(); // get state-machine to fill
+            // initialize map that maps states to their sequence of incomming transitions, and block
+            // filled while handling blocks. Used thereafter to check some well-formedness constraints
+            transitionMap.clear();
+
+            AvatarStateMachineElement theSourceState; // technical variable
+            AvatarStartState startState = null;
+            Location startStateLocation = null;
+
+            // iterate on syntactic states of the syntactic block
+            // - build statemachine
+            // - fills transitionMap for a final check.
+            StxState[] states = blk.getStates();
+            int size = (states == null ? 0 : states.length);
+            for (int i = 0; i < size; i++) {
+
+                // identify current state type
+                byte stateType = states[i].getType();
+                boolean undeclaredState = false;
+                if (! states[i].isDeclared()) { // in this case, stateType may be null
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,
+                            "state " + theBlock.getName() + "." + states[i].getName() + " is used but not declared"));
+                    stateType = AvatarFromSysMLSyntax.STXSTANDARDSTATE;
+                    undeclaredState = true;
+                }
+
+                // handle all states that have a unique corresponding avatar state-machine element (others are handled indirectly)
+                if (stateType != AvatarFromSysMLSyntax.STXPRESENDSTATE && // STXPRESENDSTATEs disappear in avatar final model
+                        stateType != AvatarFromSysMLSyntax.STXPRERECEIVESTATE && // STXPRERECEIVESTATEs disappear in avatar final model
+                        stateType != AvatarFromSysMLSyntax.STXSTOPSTATE ) { // STXSTOPSTATE: special handling: several associated avatar elements
+
+                    if (undeclaredState) {  // try to recover and continue
+                        states[i].setType(AvatarFromSysMLSyntax.STXSTANDARDSTATE);
+                    }
+
+                    // create the handled state, which is the source state of outgoing transitions that will be handled
+                    theSourceState = getState(states[i], theBlock);
+
+                    // two state types that require some specific transition-independent handling
+                    if (stateType == AvatarFromSysMLSyntax.STXRANDOMSTATE) {
+                        ((AvatarRandom) theSourceState).setOriginalValues(states[i].getMinValue(), states[i].getMaxValue());
+                        ((AvatarRandom) theSourceState).setValues(
+                                states[i].getMinValue().replaceAll("\\.", "__"),
+                                states[i].getMaxValue().replaceAll("\\.", "__"));
+                        ((AvatarRandom) theSourceState).setVariable(states[i].getVariable().replaceAll("\\.", "__"));
+                    } else if (stateType == AvatarFromSysMLSyntax.STXSTARTSTATE)
+                        if (startState == null) {
+                            startState = (AvatarStartState) theSourceState;
+                            startStateLocation = states[i].getLeft();
+                            asm.setStartState(startState);
+                        } else {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, states[i].getLeft(),
+                                    "several start-states declared, only one is kept", startStateLocation));
+                            continue;
+                        }
+
+                    // add the handled state.................
+                    addState(theSourceState, theBlock);
+                    asm.addElement(theSourceState);
+
+                    // build and add transitions.........................................
+
+                    // get outgoing transitions list
+                    List<StxTransition> transitions = states[i].getTransitions();
+                    int tsize = transitions.size();
+                    if (tsize > 1 && stateType != AvatarFromSysMLSyntax.STXSTANDARDSTATE) { // Avatar well-formedness constraint broken
+                        tsize = 1; // recover to continue
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, states[i].getTransitions().get(1).getLeft(),
+                                "state " + states[i].getName() + " only accept one single outgoing transition",
+                                states[i].getTransitions().get(1).getRleft()));
+                    }
+
+                    // iterate on outgoing transitions
+                    for (int j = 0; j < tsize; j++) {
+                        StxTransition transition = transitions.get(j);
+
+                        // skip some transition that have not been fully defined during parsing
+                        if (transition == null) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, states[i].getLeft(),
+                                    "something is wrong in state " + states[i].getName() + " : null transition found"));
+                            continue;
+                        }
+                        if (! transition.isDeclared()) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                    "transition request in state " + states[i].getName() + " of block " + theBlock.getName() +
+                                            " has no associated declaration" ));
+                            continue;
+                        }
+                        if (! transition.isRequested()) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                    "transition has no request in state " + states[i].getName()));
+                            continue;
+                        }
+
+                        // create and fills the transition (only added at the end if no critical error occurs)
+                        AvatarTransition theTransition = new AvatarTransition(theBlock,"", null);
+
+                        // handle guard
+                        if (transition.getGuard() != null) {
+                            theTransition.setGuard(
+                                    "[" + transition.getGuard().replaceAll("\\.", "__") + "]",
+                                    "[" + transition.getGuard() + "]");
+                        }
+
+                        // handle delay
+                        String minDelay = transition.getMinDelay().trim();
+                        String maxDelay = transition.getMaxDelay().trim();
+                        if (minDelay.equals(maxDelay)) maxDelay = "";
+                        theTransition.setDelays(
+                                minDelay.replaceAll("\\.", "__"),
+                                maxDelay.replaceAll("\\.", "__"),
+                                minDelay,
+                                maxDelay);
+
+                        // handle distribution law and priority
+                        setDistributionLaw(theTransition, transition.getDelayDistributionLaw(),transition.getDelayExtra(), transition);
+                        theTransition.setProbability(transition.getProbability());
+
+                        // handle actions: iterate on them and add them
+                        List<StxAction> actions = transition.getActions();
+                        int asize = actions.size();
+                        for (int k = 0; k < asize; k++) { // iterate on transition's actions
+
+                            StxAction action = actions.get(k);
+
+                            // Assignment action ..............
+                            if(action.getType() == AvatarFromSysMLSyntax.STXASSIGNACTION){
+
+                                // compute left hand
+                                String originalLeftHandStr = action.getTarget(); // get assigned variable
+                                // compute tuple string "(x__field1, ..., x__fieldN)" if variable has a datatype type
+                                String leftHandStr = extendIdent(action.getTarget().replaceAll("\\.", "__"), blk);
+
+                                // compute right hand
+                                String originalRightHandStr;
+                                String rightHandStr; //
+                                StxTerm value = action.getValue();
+                                if (value instanceof StxId) { // value is a variable (potentially field) ident
+                                    originalRightHandStr = ((StxId)value).toString();
+                                    rightHandStr = ((StxId)value).toString().replaceAll("\\.", "__");
+                                }
+                                else if (value instanceof StxExpr){ // value is an int/bool expression
+                                    originalRightHandStr = ((StxExpr)value).toString();
+                                    rightHandStr = ((StxExpr)value).toString().replaceAll("\\.", "__");
+                                }
+                                else { // value is a method call
+                                    originalRightHandStr = extendOriginalCall((StxCall)value,blk); // rebuilds original string
+                                    rightHandStr = extendCall((StxCall)value,blk); // rebuilds while extending datatype variables
+                                }
+                                // add the action
+                                theTransition.addAction(leftHandStr + "=" + rightHandStr,
+                                        originalLeftHandStr + "=" + originalRightHandStr);
+                            }
+                            // method call action ...................
+                            else { // STXMETHODACTION
+                                if (action.getValue() instanceof StxCall) { // else ERROR, action ignored
+                                    // rebuilds original string
+                                    String originalTermStr = extendOriginalCall((StxCall)action.getValue(),blk);
+                                    // rebuilds while extending datatype variables
+                                    String termStr = extendCall((StxCall)action.getValue(),blk);
+                                    // add the action
+                                    theTransition.addAction(termStr, originalTermStr);
+                                }
+                            }
+                        }
+
+                        // Handles transition target.
+                        // Depends on target type.
+                        // Also checks compatibility constraints between transition and target types.
+
+                        if (transition.getTarget() == null) { // unrecoverable, transition skiped
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                    "something is wrong in transition : no target defined", transition.getLeft()));
+                            continue;
+                        }
+
+                        // handle transition to an added state as target that disappear in avatar
+                        // produced transition must then lead to the target of the single outgoing transition of the removed state
+
+                        if (transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRESENDSTATE ||
+                                transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRERECEIVESTATE) { // target must be removed
+
+                            if (transition.getTarget().getTransitions().size() == 0 ||
+                                    transition.getTarget().getTransition(0) == null) { // target has no outgoing transition, unrecoverable
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getTarget().getLeft(),
+                                        "something is wrong in precommunication state " + transition.getTarget().getName() +
+                                                " : no outgoing transition"));
+                                continue;
+                            }
+
+                            byte type = transition.getTarget().getType(); // type of the state to remove
+                            // get second transition (outgoing from removed target) to complete the single produced avatar transition
+                            transition = transition.getTarget().getTransition(0);
+                            // TODO: check errors: this transition must not have actions, delays,... not verified. if exist, these data are skipped
+
+                            // check type compatibility between this transition and its source (the removed state). error -> unrecoverable
+                            if (type == AvatarFromSysMLSyntax.STXPRESENDSTATE & // expects some sending state
+                                    ! ( ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXSENDSTATE &&
+                                            transition.getType() == AvatarFromSysMLSyntax.STXSENDTRANSITION ) ||
+                                            ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXSETTIMERSTATE &&
+                                                    transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION ) ||
+                                            ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXRESETTIMERSTATE &&
+                                                    transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION ) )) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getTarget().getLeft(),
+                                        "outgoing transitions from pre-send state must be sending transitions leading to some sending state " +
+                                                "(send/set timer /reset timer)", transition.getLeft()));
+                                continue;
+                            }
+                            else if (type == AvatarFromSysMLSyntax.STXPRERECEIVESTATE & // expects some receiving state
+                                    ! ( ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXRECEIVESTATE &&
+                                            transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION ) ||
+                                            ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERSTATE &&
+                                                    transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION ) )) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getTarget().getLeft(),
+                                        "outgoing transitions from pre-reveive state must be sending transitions leading to some " +
+                                                "receivinging state (receive/expire timer)", transition.getLeft()));
+                                continue;
+                            }
+                        }
+
+                        // from here, the target of avatar transition under building  is the state-machine element associated
+                        // to the target of variable transition
+
+                        // handle transition target.......
+                        AvatarStateMachineElement tgtState; // target of Avatar Transition
+
+                        if (transition.getTarget().getType() == AvatarFromSysMLSyntax.STXSTOPSTATE) {
+                            // special case: a different Avatar stopstate target for each transition to the unique syntactic stopstate
+                            if (transition.getTarget().getTransitions().size() != 0) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, transition.getTarget().getLeft(),
+                                        "stopstate should not have outgoing transitions"));
+                            }
+                            tgtState = new AvatarStopState("StopState", null, theBlock); // create the stopstate
+                        }
+                        else // standard case
+                            tgtState = getState(transition.getTarget(), theBlock);
+
+                        addState(tgtState, theBlock); // initialize the map-to-incomming-transitions for the target state
+
+                        // type dependent transition handling (transition and target types) + error detections
+                        byte tgtType = transition.getTarget().getType();
+
+                        // sending transitions =====================
+                        if (transition.getType() == AvatarFromSysMLSyntax.STXSENDTRANSITION) {
+                            if(tgtState instanceof AvatarActionOnSignal) { // required
+                                AvatarActionOnSignal state = (AvatarActionOnSignal)tgtState;
+
+                                // some unrecovered errors (transition skiped)
+                                if (transition.getSignal() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "sending transition should have an associated signal", transition.getLeft()));
+                                    continue;
+                                }
+                                state.setSignal( getSignal(transition.getSignal()));
+                                if (state.getSignal().isIn()) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "signal of sending transition must be an output signal", transition.getSignal().getLeft()));
+                                    continue;
+                                }
+                                if (! transition.getSignal().isDeclared()) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getRleft(),
+                                            "transition uses a signal " + transition.getSignal().getName() + " that has not been declared"));
+                                    continue;
+                                }
+
+                                ArrayList<StxTerm> sendPayload = transition.getSendPayload();
+                                if (sendPayload != null) { // add payload info to target state (renamed "state")
+                                    int nbParam = sendPayload.size();
+                                    for(int u = 0; u < nbParam; u++) { // iterate on payload parameter list
+                                        StxTerm p = sendPayload.get(u);
+
+                                        if (p instanceof StxId) { // parameter is an attribute (field) identifier
+                                            state.addOriginalValue(p.toString());
+                                            String[] ids;
+                                            // extends parameter if datatpe: "x__field1, ..., x__fieldN" (if well typed)
+                                            String extendedPath = extendPath(p.toString().replaceAll("\\.", "__"), blk);
+                                            if (extendedPath == null) { // parameter cannot be typed
+                                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, p.getLeft(), "attribute \"" +
+                                                        p.toString() + "\" cannot be typed"));
+                                                // recover w.r.t. expected type to continue, while providing information
+                                                AvatarDataType adt = state.getSignal().getListOfOriginalAttributes().get(u).getDataType();
+                                                if (adt == null) { // basic type, keep parameter unchanged
+                                                    ids = new String[1];
+                                                    ids[0] = p.toString();
+                                                } else { // datatype, extend parameter with fields (although not well typed)
+                                                    ids = extendName(p.toString().replaceAll("\\.", "__"),adt).split(",");
+                                                }
+                                            }
+                                            else // parameter has been typed (not verified that it is the expected type)
+                                                ids = extendedPath.split(",");
+
+                                            // add parameter to ActionOnSignal state
+                                            int isize = ids.length;
+                                            for (int w = 0; w < isize; w++) state.addValue(ids[w]);
+                                        }
+
+                                        else if (p instanceof StxExpr) { // parameter is an int/bool expression, basic type
+                                            state.addOriginalValue( p.toString() );
+                                            state.addValue( p.toString().replaceAll("\\.", "__"));
+                                        }
+                                        else { // parameter is a method call
+                                            state.addOriginalValue(extendOriginalCall((StxCall)p,blk)); // rebuild original string
+                                            state.addValue(extendCall((StxCall)p,blk)); // rebuild while extending datatype-typed variable
+                                        }
+                                    }
+                                }
+                            }
+                            else  { // unrecovered error, skip transition
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "sending transition should lead to a send state", transition.getRleft()));
+                                continue;
+                            }
+                        }
+
+                        // receiving transitions =====================
+                        else if (transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION) {
+                            if(tgtState instanceof AvatarActionOnSignal) { // expected
+                                AvatarActionOnSignal state = (AvatarActionOnSignal)tgtState;
+
+                                // some unrecovered errors (transition skiped)
+                                if (transition.getSignal() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "receiving transition should have an associated signal", transition.getLeft()));
+                                    continue;
+                                }
+                                state.setSignal(getSignal(transition.getSignal()));
+
+                                if (! transition.getSignal().isDeclared()) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getRleft(),
+                                            "transition uses a signal " + transition.getSignal().getName() + " that has not been declared"));
+                                    continue;
+                                }
+                                if (state.getSignal().isOut()) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "signal of receiving transition must be an input signal", transition.getSignal().getLeft()));
+                                    continue;
+                                }
+                                if (transition.getSignal().getChannel() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "signal of receiving transition doesn't have an associated channel", transition.getSignal().getLeft()));
+                                    continue;
+                                }
+
+                                // update target state (renamed "state") with assigned attributes (fields)
+
+                                List<AvatarAttribute> profile = state.getSignal().getListOfOriginalAttributes();
+                                if (profile != null && !profile.isEmpty()) { // signal conveys values (otherwise, nothing to do)
+
+                                    // map that maps parameter names to string denoting the attributes (fields) to assign
+                                    HashMap<String, String> receivePayload = transition.getReceivePayload();
+
+                                    int nbParams = profile.size();
+                                    for (int k = 0; k < nbParams; k++) { // iterate on receiving profile parameters
+                                        AvatarAttribute aa = profile.get(k); // parameter name and type
+                                        String value; // to receive name of attribute (field) to assign with parameter
+
+                                        if (aa == null) { // parameter has not been correctly defined while parsing
+                                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getLeft(),
+                                                    "parameter " + k + " of signal " + state.getSignal().getName() +
+                                                            " is not well defined"));
+                                            value = ""; // default, because no way to identify target variable
+                                        } else { // parameter well defined
+                                            value = receivePayload.get(aa.getName());
+                                            if (value == null) { // target variable undefined
+                                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getLeft(),
+                                                        "receiving transition has a missing field"));
+                                                value = "";
+                                            }
+                                        }
+                                        state.addOriginalValue(value);
+
+                                        // add basic primitive attributesextend value w.r.t
+
+                                        String[] ids;
+                                        // extend value w.r.t its datatype if relevant
+                                        String extendedPath = extendPath(value.replaceAll("\\.", "__"), blk);
+                                        if (extendedPath == null) { // value cannot be typed
+                                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getLeft(), "attribute \"" +
+                                                    value + "\" cannot be typed"));
+                                            // recover w.r.t expected type to continue while providing info
+                                            AvatarDataType adt = profile.get(k).getDataType();
+                                            if (adt == null) { // primitive type, keep target variable name as it is
+                                                ids = new String[1];
+                                                ids[0] = value;
+                                            } else { // datatype, extend target variable w.r.t datatype fields (although not well typed)
+                                                ids = extendName(value.replaceAll("\\.", "__"),adt).split(",");
+                                            }
+                                        }
+                                        else // value has a type (not verified: is it the expected type?)
+                                            ids = extendedPath.split(",");
+
+                                        // update state with (extended) value as target attribute (fields)
+                                        int isize = ids.length;
+                                        for (int w = 0; w < isize; w++) state.addValue(ids[w]);
+                                    }
+                                }
+                            }
+                            else  { // unrecoved error, skip transition
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "receiving transition should lead to a receive state", transition.getRleft()));
+                                continue;
+                            }
+                        }
+
+                        // set-timer transitions =====================
+                        else if (transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION) {
+                            if(tgtState instanceof AvatarSetTimer) {
+                                AvatarSetTimer state = (AvatarSetTimer) tgtState;
+
+                                // some unrecovered errors (transition skipped)
+                                if (transition.getTimer() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                            "set-timer transition has no associated timer", transition.getRleft()));
+                                    continue;
+                                }
+                                state.setTimer(getTimerByName(transition.getTimer(), theBlock));
+                                if (transition.getSendPayload() == null || transition.getSendPayload().size() != 1
+                                        || !(transition.getSendPayload().get(0) instanceof StxExpr)) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                            "payload of set-timer transition is not well formed", transition.getRleft()));
+                                    continue;
+                                }
+
+                                // update target state with its specific parameters
+                                state.setTimerValue(((StxExpr)transition.getSendPayload().get(0)).toString().replaceAll(".","__"));
+                                state.setTimerOriginalValue(((StxExpr)transition.getSendPayload().get(0)).toString());
+                            }
+                            else  { // unrecoved error, skip transition
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "set-timer transition should lead to a set-timer state", transition.getRleft()));
+                                continue;
+                            }
+                        }
+
+                        // reset-timer transitions =====================
+                        else if (transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION) {
+                            if(tgtState instanceof AvatarResetTimer) {
+                                AvatarResetTimer state = (AvatarResetTimer) tgtState;
+
+                                // an unrecovered error (transition skipped)
+                                if (transition.getTimer() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                            "reset-timer transition has no associated timer", transition.getRleft()));
+                                    continue;
+                                }
+
+                                // update target state with its specific parameter
+                                state.setTimer(getTimerByName(transition.getTimer(), theBlock));
+                            }
+                            else  { // unrecoved error, skip transition
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "reset-timer transition should lead to a reset-timer state", transition.getRleft()));
+                                continue;
+                            }
+                        }
+                        // expire-timer transitions =====================
+                        else if (transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION) {
+                            if(tgtState instanceof AvatarExpireTimer) {
+                                AvatarExpireTimer state = (AvatarExpireTimer) tgtState;
+
+                                // an unrecovered error (transition skipped)
+                                if (transition.getTimer() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                            "expire-timer transition has no associated timer", transition.getRleft()));
+                                    continue;
+                                }
+
+                                // update target state with its specific parameter
+                                state.setTimer(getTimerByName(transition.getTimer(), theBlock));
+                            }
+                            else  { // unrecoved error, skip transition
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "expire-timer transition should lead to a expire-timer state", transition.getRleft()));
+                                continue;
+                            }
+                        }
+
+                        // standard transitions to non-communicating state =====================
+                        else if (! (tgtType == AvatarFromSysMLSyntax.STXSTOPSTATE ||
+                                tgtType == AvatarFromSysMLSyntax.STXSTANDARDSTATE ||
+                                tgtType == AvatarFromSysMLSyntax.STXRANDOMSTATE ||
+                                tgtType == AvatarFromSysMLSyntax.STXCOUNTSTATE ||
+                                tgtType == AvatarFromSysMLSyntax.STXSTARTSTATE) ) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                    "transition type is not consistant with the type of its target state", transition.getTarget().getLeft()));
+                            continue;
+                        }
+
+                        // All unrecovered errors have been avoided, the transition can be added
+                        asm.addElement(theTransition);
+                        theSourceState.addNext(theTransition);
+                        theTransition.addNext(tgtState);
+                        addTransition(theTransition, tgtState); // memorize incoming transition for post-processing
+                    }
+                }
+            }
+            // post-processing: verify some constraints on incoming transitions
+            transitionMap.forEach(new CheckIncommings());
+        }
+    }
+
+    /** makes some verifications relative to incomming edges, not all. In particular, not all unreachable states are removed, but this must ensure at
+     * least that keeped states are sufficiently well defined to be handled by the graphic representation building process (avoiding crashes) */
+    private class CheckIncommings implements BiConsumer<AvatarStateMachineElement, StateTransitions> {
+        List<AvatarDataType> dataTypeList;
+        public CheckIncommings(){}
+        public void accept(AvatarStateMachineElement e, StateTransitions st) {
+            int s = st.getTransitions().size();
+            if (s == 0 && ! (e instanceof AvatarStartState)) { // unreachable state that may be not well defined => to remove
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, "state " + e.getName() +
+                        " of block " + st.getBlock().getName() + " is unreachable --> removed"));
+                st.getBlock().getStateMachine().removeElement(e);
+                for(AvatarStateMachineElement x : e.getNexts())
+                    st.getBlock().getStateMachine().removeElement(x);
+            }
+            if (s > 0 && (e instanceof AvatarStartState)) { // start state has input edges => redirected to error stopstate
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, "start state in bloc " +
+                        st.getBlock().getName() + " has some input transition"));
+                for(int i = 0; i < s; i++) {
+                    st.getTransitions().get(i).getNexts().clear();
+                    AvatarStopState nw = new AvatarStopState("errorstate",null, st.getBlock());
+                    st.getTransitions().get(i).addNext(nw);
+                    st.getBlock().getStateMachine().addElement(nw);
+                }
+            }
+            if (s > 1 && !(e instanceof AvatarStartState || e instanceof AvatarStateElement)) { // too much input edges => redirected to error stopstate
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, "state " + e.getName() + " in bloc " +
+                        st.getBlock().getName() + " has more than one incomming transition"));
+
+                for(int i = 1; i < s; i++) {
+                    st.getTransitions().get(i).getNexts().clear();
+                    AvatarStopState nw = new AvatarStopState("errorstate",null, st.getBlock());
+                    st.getTransitions().get(i).addNext(nw);
+                    st.getBlock().getStateMachine().addElement(nw);
+                }
+            }
+        }
+    }
+    /** create-and-add AvatarBlocks. successive calls of BuildBlock and BuildStateMachine for each syntactic block */
+    private void buildBlocks(){
+        stxSpec.getBlockMap().forEach(new BuildBlock());
+        stxSpec.getBlockMap().forEach(new BuildStateMachine());
+    }
+
+    /** complete the parameter transition with distribution law information provided in other parameters.
+     *
+     * @param _t the transition to provide with distribution law information
+     * @param distributionLaw the distribution law name
+     * @param delayExtra a map of distribution law parameters to values
+     * @param _st the syntactic transition (provides locations for error messages)
+     */
+    private void setDistributionLaw(AvatarTransition _t, String distributionLaw, HashMap<String,String> delayExtra, StxTransition _st) {
+        int law = -1;
+        int size;
+
+        // identify distribution law......... set default DELAY_UNIFORM_LAW when a problem is encountered
+        if (distributionLaw == null || distributionLaw.equals("")) law = DELAY_UNIFORM_LAW;
+        else {
+            size = DISTRIBUTION_LAWS.length;
+            for (int i = 0; i < size; i++) { // search in defined laws
+                if (DISTRIBUTION_LAWS[i].equals(distributionLaw)) {
+                    law = i;
+                    break;
+                }
+            }
+            if (law == -1) { // not found
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, _st.getLeft(),
+                 "transition with unknown transition law : " + distributionLaw + " (set to uniform)"));
+                law = DELAY_UNIFORM_LAW;
+            }
+        }
+        // try to get law parameters............
+        // get law parameter names
+        String extra1 = LABELS_OF_EXTRA_ATTRIBUTES_1[law];
+        String extra2 = LABELS_OF_EXTRA_ATTRIBUTES_2[law];
+
+        size = NB_OF_EXTRA_ATTRIBUTES[law];
+        int max = size;
+        String tmpString;
+        if (size > 0) {
+            tmpString = extra1;
+            extra1 = delayExtra.get(extra1); // try to get value of first parameter through its name
+            if (extra1 == null) { // not found
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, _st.getLeft(),
+                 "transition law : " + distributionLaw + " requires a " + tmpString + " parameter"));
+                max--;
+            }
+            if (size > 1) {
+                tmpString = extra2;
+                extra2 = delayExtra.get(extra2); // try to get value of second parameter through its name
+                if (extra2 == null) { // not found
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, _st.getLeft(),
+                     "transition law : " + distributionLaw + " requires a " + tmpString + " parameter"));
+                    max--;
+                }
+            }
+        }
+        if (delayExtra != null && delayExtra.size() > max) { // there is some unexpected parameter value
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, _st.getLeft(),
+                     "transition law : " + distributionLaw + " has irrelevant parameters"));
+
+        }
+        // complete transition with identified data
+        _t.setDistributionLaw(law, extra1, extra2);
+    }
+
+    /** fills the parameters of a method (or signal) w.r.t. the data of a syntactic structure
+     *
+     * @param ss the syntactic structure containing field information
+     * @param am the method to update by adding the fields characterized in ss
+     * @param b the block of the method
+     */
+    private void buildProfile(StxStructure ss, AvatarMethod am, AvatarBlock b) {
+        AvatarAttribute aa;
+        int size = ss.getSize();
+        for (int i = 0; i < size; i++) { // iterates on the fields of the structure ss
+            String type = ss.getFieldType(i);
+            if (type.equals("Integer")){
+                aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.INTEGER, b, null);
+                am.addOriginalParameter(aa);
+                aa.setAsConstant(false);
+                aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.INTEGER, b, null);
+                am.addParameter(aa);
+                aa.setAsConstant(false);
+           } else if (type.equals("Boolean")) {
+                aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.BOOLEAN, b, null);
+                am.addOriginalParameter(aa);
+                aa.setAsConstant(false);
+                aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.BOOLEAN, b, null);
+                am.addParameter(aa);
+                aa.setAsConstant(false);
+            } else { // the field is datatype-typed
+                AvatarDataType adt = avSpec.getDataTypeByName(type);
+                if (adt == null) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, ss.getLeft(),
+                     "message profile uses undefined datatype " + type));
+                }
+                // add the original version of the field to am
+                String aaName = ss.getFieldName(i);
+                aa = new AvatarAttribute(aaName, AvatarType.UNDEFINED, b, null);
+                aa.setDataType(adt);
+                am.addOriginalParameter(aa);
+                aa.setAsConstant(false);
+                // add the primitive basic attributes corresponding to the datatype's field
+                if (adt != null) {
+                    aaName = aaName + "__";
+                    AvatarDataTypePrimitiveFields primitiveFields = primitiveFieldsMap.get(adt);
+                    int dtsize = primitiveFields.size();
+                    for (int j = 0; j < dtsize; j++) {
+                        aa = new AvatarAttribute(aaName + primitiveFields.getName(j),
+                                primitiveFields.getType(j), b, null);
+                        am.addParameter(aa);
+                        aa.setAsConstant(false);
+                    }
+                } else { // error, try to continue with the non coherent attribute alone
+                    aa = new AvatarAttribute(aaName, AvatarType.UNDEFINED, b, null);
+                    am.addParameter(aa);
+                    aa.setAsConstant(false);
+                }
+           }
+        }
+    }
+
+    /** get the type of an attribute (not an attribute field) from a syntactic block */
+    private String getStxAttributeType(String name, StxBlock blk){
+        int size = blk.getNbAttributes();
+        for (int i = 0; i < size; i++) {
+            if (blk.getAttribute(i).getName().equals(name)) return blk.getAttribute(i).getType();
+        }
+        return null;
+    }
+
+    /** get the type of an attribute (or an attribute field, with "__" as field delimiter) from a syntactic block */
+    private String getStxPathType(String s, StxBlock b) {
+        String[] path = s.split("__");
+        String type = getStxAttributeType(path[0], b);
+        int size = path.length;
+        for (int i = 1; i < size; i++) {
+            AvatarDataType adt = avSpec.getDataTypeByName(type);
+            if (adt == null) return null;
+            int nbFields = adt.attributeNb();
+            int j;
+            for (j = 0; j < nbFields; j++)
+                if (adt.getAttribute(j).getName().equals(path[i])) break;
+            if (j == nbFields) return null;
+            AvatarType adtType = adt.getAttribute(j).getType();
+            if (adtType == AvatarType.INTEGER)
+                type = "Integer";
+            else if (adtType == AvatarType.BOOLEAN)
+                type = "Boolean";
+            else
+                type = adt.getAttribute(j).getDataType().getName();
+        }
+        return type;
+    }
+    /** (string) Type found for ident extended by by extendPath (and thus extendIdent) */
+    private String extendTypeString;
+    /** DataType found for ident extended by extendPath (and thus extendIdent) if not primitive type */
+    private AvatarDataType extendDataType;
+    /** Primitive type found for ident extended by extendPath (and thus extendIdent) if not datatype type */
+    private AvatarType extendPrimitiveType;
+
+    /** extends a parameter attribute or field name x in a list "x__field1, ..., x__fieldN" respecting the fields of its associated type.
+     * If type is primitive, returns x unchanged. Updates extendTypeString, extendDataType and extendPrimitiveType w.r.t. the found type. */
+    private String extendPath(String path, StxBlock b) {
+        extendTypeString = getStxPathType(path, b);
+        if (extendTypeString == null) { // path cannot be typed, return null to notify the error
+            extendDataType = null;
+            extendPrimitiveType = null;
+            return null;
+        }
+        if (extendTypeString.equals("Integer")) {
+            extendDataType = null;
+            extendPrimitiveType = AvatarType.INTEGER;
+            return path;
+        }
+        if (extendTypeString.equals("Boolean")) {
+            extendDataType = null;
+            extendPrimitiveType = AvatarType.BOOLEAN;
+            return path;
+        }
+        extendPrimitiveType = null;
+        extendDataType = avSpec.getDataTypeByName(extendTypeString);
+        if (extendDataType != null)
+            return extendName(path, extendDataType);
+        else return null;
+    }
+
+    /** extends a parameter name x in a list "x__field1, ..., x__fieldN" respecting the fields of parameter datatype */
+    private String extendName(String name, AvatarDataType adt) {
+        if (adt != null) {
+            AvatarDataTypePrimitiveFields primitiveFields = primitiveFieldsMap.get(adt);
+            int size = primitiveFields.size() -1;
+            StringBuffer res = new StringBuffer();
+            int i;
+            for (i = 0; i < size; i++)
+                res.append(name + "__" + primitiveFields.getName(i) + ", ");
+            res.append(name + "__" + primitiveFields.getName(i));
+            return res.toString();
+        }
+        else return null;
+    }
+    /** extends a parameter attribute or field name x in a list in brackets "(x__field1, ..., x__fieldN)" respecting the fields of its associated
+     * type.  If this type is primitive, returns x unchanged. Updates extendTypeString, extendDataType and extendPrimitiveType w.r.t. the found type.
+     * extends a parameter name x in a list "x__field1, ..., x__fieldN" respecting the fields of parameter datatype
+     */
+    private String extendIdent (String path, StxBlock b) {
+        String result = extendPath(path, b);
+        return (result.indexOf(',') == -1 ? result : "(" + result + ")");
+    }
+
+    /** builds the string associated to a method call while extending the ones among the idents it uses that are datatype-typed */
+     private String extendCall (StxCall call, StxBlock b) {
+        StringBuffer result = new StringBuffer();
+        int size = call.getNbIdents();
+        int i;
+        for (i =0 ; i < size; i++) {
+            result.append(call.getSegment(i));
+            result.append(extendPath(call.getIdent(i).replaceAll("\\.", "__"), b));
+        }
+        result.append(call.getSegment(i));
+        return result.toString().replaceAll("\\.", "__");
+     }
+    /** rebuilds the original string associated to a method call, without ident extension */
+     private String extendOriginalCall (StxCall call, StxBlock b) {
+        StringBuffer result = new StringBuffer();
+        int size = call.getNbIdents();
+        int i;
+        for (i =0 ; i < size; i++) {
+            result.append(call.getSegment(i));
+            result.append(call.getIdent(i));
+        }
+        result.append(call.getSegment(i));
+        return result.toString();
+     }
+
+     // BUILD RELATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    /** create-and-add-to-avSpec the relations identified in stxSpec */
+    private void buildRelations(){
+        stxSpec.getRelationMap().forEach(new BuildRelation());
+    }
+
+    /** to be run on relations identified while parsing and memorized in stxSpec's relation map. Create, fill and adds-to-avSpec a relation. */
+    private class BuildRelation implements BiConsumer<String, StxRelation> {
+        public BuildRelation() {
+        }
+        public void accept(String n, StxRelation r) {
+            if (!r.isDeclared()) { // declaration part is missing in source
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR,
+                        "relation " + r.getName() +" has been used but has not been declared"));
+                // try to recover
+                int size = r.getSize();
+                if (size == 0) { // empty relation is droped
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, r.getLeft(),
+                     "relation is empty"));
+                    return;
+                } else { // channels found, try to recover blocks from them
+                    int i = 0;
+                    while (i < size && (r.getChannel(i).getBlockA() == null || r.getChannel(i).getBlockB() == null)) i++;
+                    if (i == size) { // cannot find a channel with two clearly named blocks, drop relation
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,
+                     "cannot determine blocs of relation " + r.getName()));
+                        return;
+                    }
+                    // block names found, search associated AvatarBlock structures
+                    r.setBlock1(stxSpec.getBlockMap().get(r.getChannel(i).getBlockA()));
+                    r.setBlock2(stxSpec.getBlockMap().get(r.getChannel(i).getBlockB()));
+                    if (r.getBlock1() == null || r.getBlock2() == null) { // AvatarBlock structures not found, drop relation
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,
+                     "cannot determine blocs of relation " + r.getName()));
+                        return;
+                    }
+               }
+            }
+
+            // from here, relation has blocks (from declaration or recovered)
+
+            AvatarBlock blk1 = getBlock(r.getBlock1());
+            AvatarBlock blk2 = getBlock(r.getBlock2());
+
+            // create-and-add-to-avSpec the Avatar relation
+            AvatarRelation theRelation = new AvatarRelation(n, blk1, blk2, null);
+            avSpec.addRelation(theRelation);
+
+            // set relation parameters
+            theRelation.setAsynchronous(r.getAsynchronous());
+            theRelation.setPrivate(r.getPrivate());
+            theRelation.setLossy(r.getLossy());
+            theRelation.setBlocking(r.getBlocking());
+            theRelation.setSizeOfFIFO(r.getFifoSize());
+
+            // add channels to the relation
+            int size = r.getSize();
+            if (size == 0) { // empty relation, kept because coherent although useless
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, r.getLeft(),
+                 "relation " + r.getName() + " is empty"));
+            }
+            for (int i = 0; i < size; i++) { // iterate on channels
+                StxChannel c = r.getChannel(i); // get channel
+                c.commuteSignals(r.getBlock1().getName()); // make channel respect block order in relation
+                if (!blk1.getName().equals(c.getBlockA()) || !blk2.getName().equals(c.getBlockB())) { // channel doesn't respect relation's blocks
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, c.getLeft(),
+                    "inconsistency between blocs of channel " + c.getName() + " and its relation " + r.getName()));
+                    continue;
+                }
+                // try to add channel to relation
+                if (c.getSignalA() != null && c.getSignalB() != null)
+                    theRelation.addSignals(getSignal(c.getSignalA()),getSignal(c.getSignalB()));
+                else
+                 addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, c.getLeft(),
+                 "missing signal binding for channel"));
+           }
+        }
+    }
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLError.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLError.java
new file mode 100644
index 0000000000000000000000000000000000000000..be8ced22556c4f37b275aebcedd695982d982e64
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLError.java
@@ -0,0 +1,108 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+package avatartranslator.tosysmlv2;
+import java_cup.runtime.ComplexSymbolFactory.Location;
+
+/**
+ * Class AvatarFromSysMLError
+ * Creation: 20/06/2024
+ *
+ * Errors that are reported when parsing an Avatar SysML model and building the corresponding Avatar Model.
+ * These errors are (potentially) provided with two locations. Idea: the location where the error occurs + a reference location for conflicting
+ * declarations, for example.
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ */
+public class AvatarFromSysMLError {
+    public static final byte LOWWARNING = 0; // TODO: probably simplify in 3 levels ERROR, WARNING, BUG
+    public static final byte HIGHWARNING = 1;
+    public static final byte LOWERROR = 2;
+    public static final byte HIGHERROR = 3;
+    public static final byte BUGERROR = 4;
+    /** location (sometime approximative) where the error has been detected */
+    private Location location;
+    /** reference location concerned by the error, in case of conflict for example */
+    private Location reference;
+    /** message describing the error */
+    private String message;
+    /** seriousness of the error */
+    private byte level;
+
+    public AvatarFromSysMLError(Byte lv, Location loc, String msg, Location ref){
+        location = loc;
+        reference = ref;
+        message = msg;
+        level = lv;
+    }
+    public AvatarFromSysMLError(Byte lv, Location loc, String msg){
+        location = loc;
+        reference = null;
+        message = msg;
+        level = lv;
+    }
+    public AvatarFromSysMLError(Byte lv, String msg){
+        location = null;
+        reference = null;
+        message = msg;
+        level = lv;
+    }
+    @Override
+    public String toString() {
+        StringBuffer res = new StringBuffer();
+        if (level > BUGERROR || level < LOWWARNING)
+            res.append("PROBLEM ");
+        else if (level == LOWWARNING)
+            res.append("Warning ");
+        else if (level == HIGHWARNING)
+            res.append("WARNING ");
+        else if (level == LOWERROR)
+            res.append("Error ");
+        else if (level == HIGHERROR)
+            res.append("ERROR ");
+        else
+            res.append("BUG ");
+        if (location != null)
+            res.append("(l" + (location.getLine() + 1) + ",c" + (location.getColumn() + 1) + ")");
+        res.append(": " + message);
+        if (reference != null)
+            res.append(" (c.f. l" + (reference.getLine() + 1) + ",c" + (reference.getColumn() + 1) + ")");
+        //res.append("\n");
+        return res.toString();
+    }
+
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java
new file mode 100644
index 0000000000000000000000000000000000000000..d46eba1e7e812adeada99f4fe61e359568248e8e
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java
@@ -0,0 +1,3699 @@
+/* The following code was generated by JFlex 1.4.3 on 26/09/2024 16:09 */
+
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+ package avatartranslator.tosysmlv2;
+import java_cup.runtime.*;
+import java_cup.runtime.ComplexSymbolFactory.*;
+import java.util.HashSet;
+import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*;
+
+
+/**
+ * This class is a scanner generated by 
+ * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
+ * on 26/09/2024 16:09 from the specification file
+ * <code>__AvatarFromSysMLLexer__.jflex</code>
+ */
+public class AvatarFromSysMLLexer implements java_cup.runtime.Scanner {
+
+  /** This character denotes the end of file */
+  public static final int YYEOF = -1;
+
+  /** initial size of the lookahead buffer */
+  private static final int ZZ_BUFFERSIZE = 16384;
+
+  /** lexical states */
+  public static final int YYINITIAL = 0;
+  public static final int IMPORTITEM = 4;
+  public static final int COMMENTLINE = 2;
+
+  /**
+   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
+   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+   *                  at the beginning of a line
+   * l is of the form l = 2*k, k a non negative integer
+   */
+  private static final int ZZ_LEXSTATE[] = { 
+     0,  0,  1,  1,  2, 2
+  };
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final String ZZ_CMAP_PACKED = 
+    "\11\0\1\1\1\54\1\0\1\1\1\53\22\0\1\1\1\64\1\74"+
+    "\1\104\1\17\1\61\1\62\1\7\1\67\1\70\1\60\1\57\1\73"+
+    "\1\25\1\4\1\56\1\2\1\76\1\77\7\3\1\13\1\55\1\27"+
+    "\1\65\1\26\1\66\1\10\1\112\1\20\1\110\1\101\1\115\1\21"+
+    "\1\37\1\6\1\106\2\6\1\102\1\36\1\22\1\107\1\114\1\6"+
+    "\1\105\1\23\1\111\1\6\1\113\2\6\1\24\1\6\4\0\1\5"+
+    "\1\0\1\40\1\14\1\44\1\11\1\46\1\35\1\32\1\45\1\31"+
+    "\1\116\1\16\1\15\1\47\1\34\1\42\1\43\1\100\1\41\1\30"+
+    "\1\12\1\50\1\51\1\103\1\52\1\33\1\75\1\71\1\63\1\72"+
+    "\uff82\0";
+
+  /** 
+   * Translates characters to character classes
+   */
+  private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+  /** 
+   * Translates DFA states to action switch labels.
+   */
+  private static final int [] ZZ_ACTION = zzUnpackAction();
+
+  private static final String ZZ_ACTION_PACKED_0 =
+    "\3\0\1\1\1\2\2\3\1\4\1\1\1\5\1\1"+
+    "\2\5\1\6\4\5\1\7\1\10\1\11\17\5\1\12"+
+    "\1\13\1\14\1\15\1\16\1\17\1\20\1\1\1\21"+
+    "\1\22\1\23\1\24\1\25\1\26\1\27\1\1\4\5"+
+    "\1\2\1\30\1\2\2\0\1\5\10\0\1\31\3\5"+
+    "\1\32\1\5\1\33\1\34\2\5\1\35\4\5\1\36"+
+    "\1\37\10\5\1\40\1\41\10\5\1\42\2\5\1\43"+
+    "\5\5\1\44\1\20\25\5\1\45\1\46\1\47\1\0"+
+    "\1\50\4\5\1\51\2\0\1\52\1\0\1\53\43\0"+
+    "\1\5\1\54\1\55\33\5\1\56\10\5\1\57\3\5"+
+    "\1\60\2\5\1\17\7\5\1\61\1\5\1\62\4\5"+
+    "\1\63\15\5\1\64\11\5\1\65\1\5\1\66\3\5"+
+    "\1\67\5\5\36\0\1\70\21\0\1\71\7\5\1\72"+
+    "\1\73\1\5\1\74\1\5\1\75\10\5\1\76\3\5"+
+    "\1\77\10\5\1\100\1\101\4\5\1\102\1\103\27\5"+
+    "\1\104\4\5\1\105\2\5\1\106\1\107\5\5\1\110"+
+    "\1\5\1\111\1\5\1\112\6\5\1\113\3\5\1\114"+
+    "\1\115\1\5\1\116\63\0\7\5\1\117\4\5\1\120"+
+    "\1\5\1\121\11\5\1\122\5\5\1\123\1\124\1\125"+
+    "\2\5\1\126\1\5\1\127\1\5\1\130\3\5\1\131"+
+    "\1\5\1\132\25\5\1\133\1\134\4\5\1\135\1\136"+
+    "\3\5\1\137\1\5\23\0\1\140\13\0\1\141\3\0"+
+    "\1\71\25\0\4\5\1\142\5\5\1\143\7\5\1\144"+
+    "\4\5\1\145\1\5\1\146\3\5\1\147\1\150\1\151"+
+    "\1\5\1\152\1\153\1\5\1\154\1\155\13\5\1\156"+
+    "\5\5\1\157\7\5\1\160\1\5\1\0\1\161\1\0"+
+    "\1\162\36\0\1\163\5\0\1\121\2\0\1\164\2\0"+
+    "\1\165\17\0\1\166\1\167\1\170\3\5\1\171\1\5"+
+    "\1\172\2\5\1\173\1\5\1\174\1\175\3\5\1\176"+
+    "\1\177\11\5\1\200\1\5\1\201\2\5\1\202\1\203"+
+    "\1\5\1\204\1\5\1\205\1\206\1\207\1\210\1\211"+
+    "\1\5\1\212\2\5\1\213\1\5\1\214\1\161\1\215"+
+    "\3\0\1\216\1\0\1\217\23\0\1\220\1\221\4\0"+
+    "\1\222\6\0\1\223\3\0\1\224\23\0\3\5\1\225"+
+    "\1\5\1\226\6\5\1\227\1\5\1\230\1\231\3\5"+
+    "\1\232\3\5\1\233\3\5\1\234\3\5\1\0\1\235"+
+    "\1\236\1\237\25\0\1\240\5\0\1\241\1\0\1\242"+
+    "\3\0\1\243\32\0\1\5\1\244\5\5\1\245\1\246"+
+    "\1\247\1\5\1\250\1\251\2\5\1\252\1\5\1\253"+
+    "\2\5\1\254\1\255\1\5\4\0\1\256\2\0\1\257"+
+    "\16\0\1\260\1\0\1\261\1\262\1\263\1\264\17\0"+
+    "\1\265\23\0\1\266\1\267\2\5\1\270\1\271\1\272"+
+    "\1\273\1\5\1\274\1\275\1\276\1\5\4\0\1\161"+
+    "\20\0\1\277\1\300\3\0\1\301\3\0\1\302\34\0"+
+    "\1\303\1\304\1\305\1\5\27\0\1\306\7\0\1\307"+
+    "\33\0\1\310\2\0\1\311\1\0\1\312\24\0\1\313"+
+    "\7\0\1\314\5\0\1\315\25\0\1\316\1\317\22\0"+
+    "\1\320\1\0\1\321\4\0\1\322\4\0\1\323\14\0"+
+    "\1\324\11\0\1\325\12\0\1\326\2\0\1\327\1\330"+
+    "\1\331\34\0\1\332\3\0\1\333\7\0\1\334\2\0"+
+    "\1\335\2\0\1\336\26\0\1\337\1\340\7\0\1\341"+
+    "\2\0\1\342\1\343\10\0\1\344\14\0\1\345\5\0"+
+    "\1\346\5\0\1\347\2\0\1\350\16\0\1\351\1\0"+
+    "\1\352\1\353\2\0\1\354\6\0\1\355\1\356\1\357"+
+    "\1\360\5\0\1\361\1\362\4\0\1\363\11\0\1\364"+
+    "\5\0\1\365\1\366\5\0\1\367\1\370\6\0\1\371"+
+    "\6\0\1\372\1\373\1\0\1\374\3\0\1\375\1\0"+
+    "\1\376\1\0\1\377";
+
+  private static int [] zzUnpackAction() {
+    int [] result = new int[1524];
+    int offset = 0;
+    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAction(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /** 
+   * Translates a state to a row index in the transition table
+   */
+  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+  private static final String ZZ_ROWMAP_PACKED_0 =
+    "\0\0\0\117\0\236\0\355\0\355\0\u013c\0\u018b\0\355"+
+    "\0\u01da\0\u0229\0\u0278\0\u02c7\0\u0316\0\u0365\0\u03b4\0\u0403"+
+    "\0\u0452\0\u04a1\0\355\0\u04f0\0\u053f\0\u058e\0\u05dd\0\u062c"+
+    "\0\u067b\0\u06ca\0\u0719\0\u0768\0\u07b7\0\u0806\0\u0855\0\u08a4"+
+    "\0\u08f3\0\u0942\0\u0991\0\u09e0\0\355\0\u0a2f\0\355\0\355"+
+    "\0\355\0\355\0\355\0\u0a7e\0\u0acd\0\355\0\355\0\355"+
+    "\0\355\0\355\0\355\0\u0b1c\0\u0b6b\0\u0bba\0\u0c09\0\u0c58"+
+    "\0\u0ca7\0\355\0\u0cf6\0\u0d45\0\u0d94\0\u0de3\0\u0e32\0\u0e81"+
+    "\0\u0ed0\0\u0f1f\0\u0f6e\0\u0fbd\0\u100c\0\u105b\0\u10aa\0\u10f9"+
+    "\0\u1148\0\u1197\0\u0229\0\u11e6\0\355\0\355\0\u1235\0\u1284"+
+    "\0\u0229\0\u12d3\0\u1322\0\u1371\0\u13c0\0\355\0\355\0\u140f"+
+    "\0\u145e\0\u14ad\0\u14fc\0\u154b\0\u159a\0\u15e9\0\u1638\0\u1687"+
+    "\0\u0229\0\u16d6\0\u1725\0\u1774\0\u17c3\0\u1812\0\u1861\0\u18b0"+
+    "\0\u18ff\0\u194e\0\u199d\0\u19ec\0\u1a3b\0\u1a8a\0\u1ad9\0\u1b28"+
+    "\0\u1b77\0\u1bc6\0\u0229\0\u1c15\0\u1c64\0\u1cb3\0\u1d02\0\u1d51"+
+    "\0\u1da0\0\u1def\0\u1e3e\0\u1e8d\0\u1edc\0\u1f2b\0\u1f7a\0\u1fc9"+
+    "\0\u2018\0\u2067\0\u20b6\0\u2105\0\u2154\0\u21a3\0\u21f2\0\u2241"+
+    "\0\u2290\0\355\0\355\0\355\0\u0b1c\0\355\0\u22df\0\u232e"+
+    "\0\u237d\0\u23cc\0\u0d45\0\u241b\0\u246a\0\355\0\u24b9\0\355"+
+    "\0\u2508\0\u2557\0\u25a6\0\u25f5\0\u2644\0\u2693\0\u26e2\0\u2731"+
+    "\0\u2780\0\u27cf\0\u281e\0\u286d\0\u28bc\0\u290b\0\u295a\0\u29a9"+
+    "\0\u29f8\0\u2a47\0\u2a96\0\u2ae5\0\u2b34\0\u2b83\0\u2bd2\0\u2c21"+
+    "\0\u2c70\0\u2cbf\0\u2d0e\0\u2d5d\0\u2dac\0\u2dfb\0\u2e4a\0\u2e99"+
+    "\0\u2ee8\0\u2f37\0\u2f86\0\u2fd5\0\u0229\0\u3024\0\u3073\0\u30c2"+
+    "\0\u3111\0\u3160\0\u31af\0\u31fe\0\u324d\0\u329c\0\u32eb\0\u333a"+
+    "\0\u3389\0\u33d8\0\u3427\0\u3476\0\u34c5\0\u3514\0\u3563\0\u35b2"+
+    "\0\u3601\0\u3650\0\u369f\0\u36ee\0\u373d\0\u378c\0\u37db\0\u382a"+
+    "\0\u3879\0\u0229\0\u38c8\0\u3917\0\u3966\0\u39b5\0\u3a04\0\u3a53"+
+    "\0\u3aa2\0\u3af1\0\u3b40\0\u3b8f\0\u3bde\0\u3c2d\0\u3c7c\0\u3ccb"+
+    "\0\u3d1a\0\u0229\0\u3d69\0\u3db8\0\u3e07\0\u3e56\0\u3ea5\0\u3ef4"+
+    "\0\u3f43\0\u3f92\0\u3fe1\0\u0229\0\u4030\0\u407f\0\u40ce\0\u411d"+
+    "\0\u0229\0\u416c\0\u41bb\0\u420a\0\u4259\0\u42a8\0\u42f7\0\u4346"+
+    "\0\u4395\0\u43e4\0\u4433\0\u4482\0\u44d1\0\u4520\0\u0229\0\u456f"+
+    "\0\u45be\0\u460d\0\u465c\0\u46ab\0\u46fa\0\u4749\0\u4798\0\u47e7"+
+    "\0\u0229\0\u4836\0\u0229\0\u4885\0\u48d4\0\u4923\0\u0229\0\u4972"+
+    "\0\u49c1\0\u4a10\0\u4a5f\0\u4aae\0\u4afd\0\u4b4c\0\u4b9b\0\u4bea"+
+    "\0\u4c39\0\u4c88\0\u4cd7\0\u4d26\0\u4d75\0\u4dc4\0\u4e13\0\u4e62"+
+    "\0\u4eb1\0\u4f00\0\u4f4f\0\u4f9e\0\u4fed\0\u503c\0\u508b\0\u50da"+
+    "\0\u5129\0\u5178\0\u51c7\0\u5216\0\u5265\0\u52b4\0\u5303\0\u5352"+
+    "\0\u53a1\0\u53f0\0\355\0\u543f\0\u548e\0\u54dd\0\u552c\0\u557b"+
+    "\0\u55ca\0\u5619\0\u5668\0\u56b7\0\u5706\0\u5755\0\u57a4\0\u57f3"+
+    "\0\u5842\0\u5891\0\u58e0\0\u592f\0\u0229\0\u597e\0\u59cd\0\u5a1c"+
+    "\0\u5a6b\0\u5aba\0\u5b09\0\u5b58\0\u0229\0\u0229\0\u5ba7\0\u5bf6"+
+    "\0\u5c45\0\u0229\0\u5c94\0\u5ce3\0\u5d32\0\u5d81\0\u5dd0\0\u5e1f"+
+    "\0\u5e6e\0\u5ebd\0\u0229\0\u5f0c\0\u5f5b\0\u5faa\0\u0229\0\u5ff9"+
+    "\0\u6048\0\u6097\0\u60e6\0\u6135\0\u6184\0\u61d3\0\u6222\0\u0229"+
+    "\0\u0229\0\u6271\0\u62c0\0\u630f\0\u635e\0\u0229\0\u0229\0\u63ad"+
+    "\0\u63fc\0\u644b\0\u649a\0\u64e9\0\u6538\0\u6587\0\u65d6\0\u6625"+
+    "\0\u6674\0\u66c3\0\u6712\0\u6761\0\u67b0\0\u67ff\0\u684e\0\u689d"+
+    "\0\u68ec\0\u693b\0\u698a\0\u69d9\0\u6a28\0\u6a77\0\u0229\0\u6ac6"+
+    "\0\u6b15\0\u6b64\0\u6bb3\0\u0229\0\u6c02\0\u6c51\0\u0229\0\u0229"+
+    "\0\u6ca0\0\u6cef\0\u6d3e\0\u6d8d\0\u6ddc\0\u0229\0\u6e2b\0\u0229"+
+    "\0\u6e7a\0\u0229\0\u6ec9\0\u6f18\0\u6f67\0\u6fb6\0\u7005\0\u7054"+
+    "\0\u70a3\0\u70f2\0\u7141\0\u7190\0\u0229\0\u0229\0\u71df\0\u0229"+
+    "\0\u722e\0\u727d\0\u72cc\0\u731b\0\u736a\0\u73b9\0\u7408\0\u7457"+
+    "\0\u74a6\0\u74f5\0\u7544\0\u7593\0\u75e2\0\u7631\0\u7680\0\u76cf"+
+    "\0\u771e\0\u776d\0\u77bc\0\u780b\0\u785a\0\u78a9\0\u78f8\0\u7947"+
+    "\0\u7996\0\u79e5\0\u7a34\0\u7a83\0\u7ad2\0\u7b21\0\u7b70\0\u7bbf"+
+    "\0\u7c0e\0\u7c5d\0\u7cac\0\u7cfb\0\u7d4a\0\u7d99\0\u7de8\0\u7e37"+
+    "\0\u7e86\0\u7ed5\0\u7f24\0\u7f73\0\u7fc2\0\u8011\0\u8060\0\u80af"+
+    "\0\u80fe\0\u814d\0\u819c\0\u81eb\0\u823a\0\u8289\0\u82d8\0\u8327"+
+    "\0\u8376\0\u83c5\0\u0229\0\u8414\0\u8463\0\u84b2\0\u8501\0\u0229"+
+    "\0\u8550\0\u0229\0\u859f\0\u85ee\0\u863d\0\u868c\0\u86db\0\u872a"+
+    "\0\u8779\0\u87c8\0\u8817\0\u0229\0\u8866\0\u88b5\0\u8904\0\u8953"+
+    "\0\u89a2\0\u0229\0\u0229\0\u0229\0\u89f1\0\u8a40\0\u0229\0\u8a8f"+
+    "\0\u0229\0\u8ade\0\u0229\0\u8b2d\0\u8b7c\0\u8bcb\0\u0229\0\u8c1a"+
+    "\0\u0229\0\u8c69\0\u8cb8\0\u8d07\0\u8d56\0\u8da5\0\u8df4\0\u8e43"+
+    "\0\u8e92\0\u8ee1\0\u8f30\0\u8f7f\0\u8fce\0\u901d\0\u906c\0\u90bb"+
+    "\0\u910a\0\u9159\0\u91a8\0\u91f7\0\u9246\0\u9295\0\u0229\0\u0229"+
+    "\0\u92e4\0\u9333\0\u9382\0\u93d1\0\u0229\0\u0229\0\u9420\0\u946f"+
+    "\0\u94be\0\u0229\0\u950d\0\u955c\0\u95ab\0\u95fa\0\u9649\0\u9698"+
+    "\0\u96e7\0\u9736\0\u9785\0\u97d4\0\u9823\0\u9872\0\u98c1\0\u9910"+
+    "\0\u995f\0\u99ae\0\u99fd\0\u9a4c\0\u9a9b\0\u9aea\0\355\0\u9b39"+
+    "\0\u9b88\0\u9bd7\0\u9c26\0\u9c75\0\u9cc4\0\u9d13\0\u9d62\0\u9db1"+
+    "\0\u9e00\0\u9e4f\0\355\0\u9e9e\0\u9eed\0\u9f3c\0\355\0\u9f8b"+
+    "\0\u9fda\0\ua029\0\ua078\0\ua0c7\0\ua116\0\ua165\0\ua1b4\0\ua203"+
+    "\0\ua252\0\ua2a1\0\ua2f0\0\ua33f\0\ua38e\0\ua3dd\0\ua42c\0\ua47b"+
+    "\0\ua4ca\0\ua519\0\ua568\0\ua5b7\0\ua606\0\ua655\0\ua6a4\0\ua6f3"+
+    "\0\u0229\0\ua742\0\ua791\0\ua7e0\0\ua82f\0\ua87e\0\u0229\0\ua8cd"+
+    "\0\ua91c\0\ua96b\0\ua9ba\0\uaa09\0\uaa58\0\uaaa7\0\u0229\0\uaaf6"+
+    "\0\uab45\0\uab94\0\uabe3\0\u0229\0\uac32\0\u0229\0\uac81\0\uacd0"+
+    "\0\uad1f\0\u0229\0\u0229\0\u0229\0\uad6e\0\u0229\0\u0229\0\uadbd"+
+    "\0\u0229\0\uae0c\0\uae5b\0\uaeaa\0\uaef9\0\uaf48\0\uaf97\0\uafe6"+
+    "\0\ub035\0\ub084\0\ub0d3\0\ub122\0\ub171\0\u0229\0\ub1c0\0\ub20f"+
+    "\0\ub25e\0\ub2ad\0\ub2fc\0\u0229\0\ub34b\0\ub39a\0\ub3e9\0\ub438"+
+    "\0\ub487\0\ub4d6\0\ub525\0\u0229\0\ub574\0\ub5c3\0\ub612\0\ub661"+
+    "\0\355\0\ub6b0\0\ub6ff\0\ub74e\0\ub79d\0\ub7ec\0\ub83b\0\ub88a"+
+    "\0\ub8d9\0\ub928\0\ub977\0\ub9c6\0\uba15\0\uba64\0\ubab3\0\ubb02"+
+    "\0\ubb51\0\ubba0\0\ubbef\0\ubc3e\0\ubc8d\0\ubcdc\0\ubd2b\0\ubd7a"+
+    "\0\ubdc9\0\ube18\0\ube67\0\ubeb6\0\ubf05\0\ubf54\0\ubfa3\0\355"+
+    "\0\ubff2\0\uc041\0\uc090\0\uc0df\0\uc12e\0\355\0\uc17d\0\uc1cc"+
+    "\0\355\0\uc21b\0\uc26a\0\355\0\uc2b9\0\uc308\0\uc357\0\uc3a6"+
+    "\0\uc3f5\0\uc444\0\uc493\0\uc4e2\0\uc531\0\uc580\0\uc5cf\0\uc61e"+
+    "\0\uc66d\0\uc6bc\0\uc70b\0\u0229\0\u0229\0\u0229\0\uc75a\0\uc7a9"+
+    "\0\uc7f8\0\u0229\0\uc847\0\u0229\0\uc896\0\uc8e5\0\u0229\0\uc934"+
+    "\0\u0229\0\u0229\0\uc983\0\uc9d2\0\uca21\0\u0229\0\u0229\0\uca70"+
+    "\0\ucabf\0\ucb0e\0\ucb5d\0\ucbac\0\ucbfb\0\ucc4a\0\ucc99\0\ucce8"+
+    "\0\ucd37\0\ucd86\0\u0229\0\ucdd5\0\uce24\0\u0229\0\u0229\0\uce73"+
+    "\0\u0229\0\ucec2\0\ucf11\0\u0229\0\u0229\0\u0229\0\u0229\0\ucf60"+
+    "\0\u0229\0\ucfaf\0\ucffe\0\u0229\0\ud04d\0\u0229\0\ub5c3\0\355"+
+    "\0\ud09c\0\ud0eb\0\ud13a\0\355\0\ud189\0\355\0\ud1d8\0\ud227"+
+    "\0\ud276\0\ud2c5\0\ud314\0\ud363\0\ud3b2\0\ud401\0\ud450\0\ud49f"+
+    "\0\ud4ee\0\ud53d\0\ud58c\0\ud5db\0\ud62a\0\ud679\0\ud6c8\0\ud717"+
+    "\0\ud766\0\355\0\355\0\ud7b5\0\ud804\0\ud853\0\ud8a2\0\355"+
+    "\0\ud8f1\0\ud940\0\ud98f\0\ud9de\0\uda2d\0\uda7c\0\355\0\udacb"+
+    "\0\udb1a\0\udb69\0\355\0\udbb8\0\udc07\0\udc56\0\udca5\0\udcf4"+
+    "\0\udd43\0\udd92\0\udde1\0\ude30\0\ude7f\0\udece\0\udf1d\0\udf6c"+
+    "\0\udfbb\0\ue00a\0\ue059\0\ue0a8\0\ue0f7\0\ue146\0\ue195\0\ue1e4"+
+    "\0\ue233\0\u0229\0\ue282\0\u0229\0\ue2d1\0\ue320\0\ue36f\0\ue3be"+
+    "\0\ue40d\0\ue45c\0\u0229\0\ue4ab\0\u0229\0\u0229\0\ue4fa\0\ue549"+
+    "\0\ue598\0\u0229\0\ue5e7\0\ue636\0\ue685\0\u0229\0\ue6d4\0\ue723"+
+    "\0\ue772\0\u0229\0\ue7c1\0\ue810\0\ue85f\0\ue8ae\0\355\0\355"+
+    "\0\355\0\ue8fd\0\ue94c\0\ue99b\0\ue9ea\0\uea39\0\uea88\0\uead7"+
+    "\0\ueb26\0\ueb75\0\uebc4\0\uec13\0\uec62\0\uecb1\0\ued00\0\ued4f"+
+    "\0\ued9e\0\ueded\0\uee3c\0\uee8b\0\ueeda\0\uef29\0\355\0\uef78"+
+    "\0\uefc7\0\uf016\0\uf065\0\uf0b4\0\355\0\uf103\0\355\0\uf152"+
+    "\0\uf1a1\0\uf1f0\0\355\0\uf23f\0\uf28e\0\uf2dd\0\uf32c\0\uf37b"+
+    "\0\uf3ca\0\uf419\0\uf468\0\uf4b7\0\uf506\0\uf555\0\uf5a4\0\uf5f3"+
+    "\0\uf642\0\uf691\0\uf6e0\0\uf72f\0\uf77e\0\uf7cd\0\uf81c\0\uf86b"+
+    "\0\uf8ba\0\uf909\0\uf958\0\uf9a7\0\uf9f6\0\ufa45\0\u0229\0\ufa94"+
+    "\0\ufae3\0\ufb32\0\ufb81\0\ufbd0\0\u0229\0\u0229\0\u0229\0\ufc1f"+
+    "\0\u0229\0\u0229\0\ufc6e\0\ufcbd\0\u0229\0\ufd0c\0\u0229\0\ufd5b"+
+    "\0\ufdaa\0\u0229\0\u0229\0\ufdf9\0\ufe48\0\ufe97\0\ufee6\0\uff35"+
+    "\0\355\0\uff84\0\uffd3\0\355\1\42\1\161\1\300\1\u010f"+
+    "\1\u015e\1\u01ad\1\u01fc\1\u024b\1\u029a\1\u02e9\1\u0338\1\u0387"+
+    "\1\u03d6\1\u0425\0\355\1\u0474\0\355\0\355\0\355\0\355"+
+    "\1\u04c3\1\u0512\1\u0561\1\u05b0\1\u05ff\1\u064e\1\u069d\1\u06ec"+
+    "\1\u073b\1\u078a\1\u07d9\1\u0828\1\u0877\1\u08c6\1\u0915\0\355"+
+    "\1\u0964\1\u09b3\1\u0a02\1\u0a51\1\u0aa0\1\u0aef\1\u0b3e\1\u0b8d"+
+    "\1\u0bdc\1\u0c2b\1\u0c7a\1\u0cc9\1\u0d18\1\u0d67\1\u0db6\1\u0e05"+
+    "\1\u0e54\1\u0ea3\1\u0ef2\0\u0229\0\u0229\1\u0f41\1\u0f90\0\u0229"+
+    "\0\u0229\0\u0229\0\u0229\1\u0fdf\0\u0229\0\u0229\0\u0229\1\u102e"+
+    "\1\u107d\1\u10cc\1\u111b\1\u116a\0\355\1\u11b9\1\u1208\1\u1257"+
+    "\1\u12a6\1\u12f5\1\u1344\1\u1393\1\u13e2\1\u1431\1\u1480\1\u14cf"+
+    "\1\u151e\1\u156d\1\u15bc\1\u160b\1\u165a\0\355\0\355\1\u16a9"+
+    "\1\u16f8\1\u1747\0\355\1\u1796\1\u17e5\1\u1834\0\355\1\u1883"+
+    "\1\u18d2\1\u1921\1\u1970\1\u19bf\1\u1a0e\1\u1a5d\1\u1aac\1\u1afb"+
+    "\1\u1b4a\1\u1b99\1\u1be8\1\u1c37\1\u1c86\1\u1cd5\1\u1d24\1\u1d73"+
+    "\1\u1dc2\1\u1e11\1\u1e60\1\u1eaf\1\u1efe\1\u1f4d\1\u1f9c\1\u1feb"+
+    "\1\u203a\1\u2089\1\u20d8\0\u0229\0\u0229\0\u0229\1\u2127\1\u2176"+
+    "\1\u21c5\1\u2214\1\u2263\1\u22b2\1\u2301\1\u2350\1\u239f\1\u23ee"+
+    "\1\u243d\1\u248c\1\u24db\1\u252a\1\u2579\1\u25c8\1\u2617\1\u2666"+
+    "\1\u26b5\1\u2704\1\u2753\1\u27a2\1\u27f1\1\u2840\0\355\1\u288f"+
+    "\1\u28de\1\u292d\1\u297c\1\u29cb\1\u2a1a\1\u2a69\0\355\1\u2ab8"+
+    "\1\u2b07\1\u2b56\1\u2ba5\1\u2bf4\1\u2c43\1\u2c92\1\u2ce1\1\u2d30"+
+    "\1\u2d7f\1\u2dce\1\u2e1d\1\u2e6c\1\u2ebb\1\u2f0a\1\u2f59\1\u2fa8"+
+    "\1\u2ff7\1\u3046\1\u3095\1\u30e4\1\u3133\1\u3182\1\u31d1\1\u3220"+
+    "\1\u326f\1\u32be\0\u0229\1\u330d\1\u335c\0\355\1\u33ab\0\355"+
+    "\1\u33fa\1\u3449\1\u3498\1\u34e7\1\u3536\1\u3585\1\u35d4\1\u3623"+
+    "\1\u3672\1\u36c1\1\u3710\1\u375f\1\u37ae\1\u37fd\1\u384c\1\u389b"+
+    "\1\u38ea\1\u3939\1\u3988\1\u39d7\0\355\1\u3a26\1\u3a75\1\u3ac4"+
+    "\1\u3b13\1\u3b62\1\u3bb1\1\u3c00\0\355\1\u3c4f\1\u3c9e\1\u3ced"+
+    "\1\u3d3c\1\u3d8b\0\355\1\u3dda\1\u3e29\1\u3e78\1\u3ec7\1\u3f16"+
+    "\1\u3f65\1\u3fb4\1\u4003\1\u4052\1\u40a1\1\u40f0\1\u413f\1\u418e"+
+    "\1\u41dd\1\u422c\1\u427b\1\u42ca\1\u4319\1\u4368\1\u43b7\1\u4406"+
+    "\0\355\0\355\1\u4455\1\u44a4\1\u44f3\1\u4542\1\u4591\1\u45e0"+
+    "\1\u462f\1\u467e\1\u46cd\1\u471c\1\u476b\1\u47ba\1\u4809\1\u4858"+
+    "\1\u48a7\1\u48f6\1\u4945\1\u4994\0\355\1\u49e3\0\355\1\u4a32"+
+    "\1\u4a81\1\u4ad0\1\u4b1f\0\355\1\u4b6e\1\u4bbd\1\u4c0c\1\u4c5b"+
+    "\0\355\1\u4caa\1\u4cf9\1\u4d48\1\u4d97\1\u4de6\1\u4e35\1\u4e84"+
+    "\1\u4ed3\1\u4f22\1\u4f71\1\u4fc0\1\u500f\0\355\1\u505e\1\u50ad"+
+    "\1\u50fc\1\u514b\1\u519a\1\u51e9\1\u5238\1\u5287\1\u52d6\0\355"+
+    "\1\u5325\1\u5374\1\u53c3\1\u5412\1\u5461\1\u54b0\1\u54ff\1\u554e"+
+    "\1\u559d\1\u55ec\0\355\1\u563b\1\u568a\0\355\0\355\0\355"+
+    "\1\u56d9\1\u5728\1\u5777\1\u57c6\1\u5815\1\u5864\1\u58b3\1\u5902"+
+    "\1\u5951\1\u59a0\1\u59ef\1\u5a3e\1\u5a8d\1\u5adc\1\u5b2b\1\u5b7a"+
+    "\1\u5bc9\1\u5c18\1\u5c67\1\u5cb6\1\u5d05\1\u5d54\1\u5da3\1\u5df2"+
+    "\1\u5e41\1\u5e90\1\u5edf\1\u5f2e\0\355\1\u5f7d\1\u5fcc\1\u601b"+
+    "\0\355\1\u606a\1\u60b9\1\u6108\1\u6157\1\u61a6\1\u61f5\1\u6244"+
+    "\0\355\1\u6293\1\u62e2\0\355\1\u6331\1\u6380\0\355\1\u63cf"+
+    "\1\u641e\1\u646d\1\u64bc\1\u650b\1\u655a\1\u65a9\1\u65f8\1\u6647"+
+    "\1\u6696\1\u66e5\1\u6734\1\u6783\1\u67d2\1\u6821\1\u6870\1\u68bf"+
+    "\1\u690e\1\u695d\1\u69ac\1\u69fb\1\u6a4a\0\355\0\355\1\u6a99"+
+    "\1\u6ae8\1\u6b37\1\u6b86\1\u6bd5\1\u6c24\1\u6c73\0\355\1\u6cc2"+
+    "\1\u6d11\0\355\0\355\1\u6d60\1\u6daf\1\u6dfe\1\u6e4d\1\u6e9c"+
+    "\1\u6eeb\1\u6f3a\1\u6f89\0\355\1\u6fd8\1\u7027\1\u7076\1\u70c5"+
+    "\1\u7114\1\u7163\1\u71b2\1\u7201\1\u7250\1\u729f\1\u72ee\1\u733d"+
+    "\0\355\1\u738c\1\u73db\1\u742a\1\u7479\1\u74c8\0\355\1\u7517"+
+    "\1\u7566\1\u75b5\1\u7604\1\u7653\0\355\1\u76a2\1\u76f1\0\355"+
+    "\1\u7740\1\u778f\1\u77de\1\u782d\1\u787c\1\u78cb\1\u791a\1\u7969"+
+    "\1\u79b8\1\u7a07\1\u7a56\1\u7aa5\1\u7af4\1\u7b43\0\355\1\u7b92"+
+    "\0\355\0\355\1\u7be1\1\u7c30\0\355\1\u7c7f\1\u7cce\1\u7d1d"+
+    "\1\u7d6c\1\u7dbb\1\u7e0a\0\355\0\355\0\355\0\355\1\u7e59"+
+    "\1\u7ea8\1\u7ef7\1\u7f46\1\u7f95\0\355\0\355\1\u7fe4\1\u8033"+
+    "\1\u8082\1\u80d1\0\355\1\u8120\1\u816f\1\u81be\1\u820d\1\u825c"+
+    "\1\u82ab\1\u82fa\1\u8349\1\u8398\0\355\1\u83e7\1\u8436\1\u8485"+
+    "\1\u84d4\1\u8523\0\355\0\355\1\u8572\1\u85c1\1\u8610\1\u865f"+
+    "\1\u86ae\0\355\0\355\1\u86fd\1\u874c\1\u879b\1\u87ea\1\u8839"+
+    "\1\u8888\0\355\1\u88d7\1\u8926\1\u8975\1\u89c4\1\u8a13\1\u8a62"+
+    "\0\355\0\355\1\u8ab1\0\355\1\u8b00\1\u8b4f\1\u8b9e\0\355"+
+    "\1\u8bed\0\355\1\u8c3c\0\355";
+
+  private static int [] zzUnpackRowMap() {
+    int [] result = new int[1524];
+    int offset = 0;
+    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+    int i = 0;  /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int high = packed.charAt(i++) << 16;
+      result[j++] = high | packed.charAt(i++);
+    }
+    return j;
+  }
+
+  /** 
+   * The transition table of the DFA
+   */
+  private static final int [] ZZ_TRANS = zzUnpackTrans();
+
+  private static final String ZZ_TRANS_PACKED_0 =
+    "\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13"+
+    "\1\4\1\14\1\15\1\16\1\17\1\20\1\12\1\4"+
+    "\1\21\2\12\1\22\1\12\1\23\1\24\1\25\1\26"+
+    "\1\27\2\12\1\30\1\31\2\12\1\32\1\33\1\34"+
+    "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+
+    "\2\5\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
+    "\1\54\1\55\1\56\1\57\1\60\1\61\1\62\1\63"+
+    "\1\64\1\12\2\7\3\12\1\65\1\4\1\66\1\67"+
+    "\7\12\1\70\53\71\1\0\1\72\42\71\55\73\1\72"+
+    "\41\73\123\0\1\74\114\0\2\7\1\74\71\0\2\7"+
+    "\21\0\2\12\2\0\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\5\77\1\100\1\101\1\0\1\102\1\103\1\101"+
+    "\1\77\3\101\1\104\5\101\3\77\1\105\22\101\22\77"+
+    "\1\101\2\77\4\101\1\106\12\101\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\12\12\1\107\3\12\1\110\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\111"+
+    "\7\12\1\112\1\113\2\12\1\114\5\12\22\0\7\12"+
+    "\1\0\12\12\13\0\1\10\12\0\1\115\36\0\1\116"+
+    "\33\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\1\12\1\117\1\12\1\0\5\12\3\0\1\12\1\120"+
+    "\1\12\1\121\17\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\10\12\1\122\1\12\1\123\10\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\12\12\1\124\10\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\12\1\125\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\65\0\1\126\116\0\1\127\33\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\12\1\130\1\0\3\12\1\0"+
+    "\5\12\3\0\4\12\1\131\3\12\1\132\2\12\1\133"+
+    "\2\12\1\134\1\12\1\135\2\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\1\12"+
+    "\1\136\1\0\3\12\1\0\5\12\3\0\1\137\3\12"+
+    "\1\140\1\141\11\12\1\142\3\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\12\12\1\143\5\12"+
+    "\1\144\2\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\145"+
+    "\1\12\1\0\5\12\3\0\1\12\1\146\6\12\1\147"+
+    "\1\150\1\151\10\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\12\1\152\1\0"+
+    "\1\153\1\154\1\12\1\0\5\12\3\0\1\155\3\12"+
+    "\1\156\1\157\6\12\1\160\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\161\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\1\162\2\12\1\0\5\12"+
+    "\3\0\5\12\1\163\3\12\1\164\2\12\1\165\3\12"+
+    "\1\166\2\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\10\12\1\167\1\170\1\171\3\12\1\172"+
+    "\1\12\1\173\2\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\10\12\1\174\1\12\1\175\10\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\10\12\1\176\12\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\1\12"+
+    "\1\177\1\12\1\0\5\12\3\0\4\12\1\200\14\12"+
+    "\1\201\1\202\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\203\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\204\3\12\1\205"+
+    "\16\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\206\6\12\1\207\5\12\1\210\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\12\12\1\211\10\12\22\0\7\12\1\0\12\12\56\0"+
+    "\1\212\125\0\1\213\116\0\1\214\31\0\74\215\1\216"+
+    "\22\215\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\15\12\1\217\5\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\220\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\221\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\12\12\1\222"+
+    "\10\12\22\0\7\12\1\0\12\12\53\71\2\0\42\71"+
+    "\55\73\1\0\41\73\2\0\2\223\72\0\2\223\24\0"+
+    "\1\224\1\225\2\0\2\225\1\0\3\225\1\0\5\225"+
+    "\3\0\23\225\22\0\1\225\2\0\4\225\1\0\12\225"+
+    "\2\0\2\12\1\75\1\0\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\7\77\1\226\111\77\2\101\2\77\1\101\1\226"+
+    "\1\77\2\101\1\77\3\101\1\77\5\101\3\77\23\101"+
+    "\22\77\7\101\1\77\12\101\2\77\2\101\1\77\1\227"+
+    "\1\101\1\230\1\77\2\101\1\77\3\101\1\77\5\101"+
+    "\3\77\23\101\22\77\7\101\1\77\12\101\7\77\1\226"+
+    "\1\77\1\231\1\232\1\77\1\233\3\77\1\234\1\77"+
+    "\1\235\1\236\4\77\1\237\1\240\2\77\1\241\1\77"+
+    "\1\242\1\77\1\243\1\244\1\77\1\245\1\246\1\77"+
+    "\1\247\1\250\1\77\1\251\31\77\1\252\15\77\2\101"+
+    "\1\77\1\227\1\101\1\230\1\77\2\101\1\77\3\101"+
+    "\1\77\5\101\3\77\12\101\1\253\10\101\22\77\7\101"+
+    "\1\77\12\101\5\77\1\254\1\255\1\226\1\77\2\255"+
+    "\1\77\3\255\1\77\5\255\3\77\23\255\22\77\1\255"+
+    "\2\77\4\255\1\77\12\255\2\77\2\101\1\77\1\227"+
+    "\1\101\1\230\1\77\1\101\1\256\1\77\3\101\1\77"+
+    "\5\101\3\77\23\101\22\77\7\101\1\77\12\101\7\77"+
+    "\1\226\4\77\1\257\3\77\1\260\1\261\1\262\1\263"+
+    "\5\77\1\264\2\77\1\265\50\77\1\266\1\267\1\270"+
+    "\1\271\1\272\1\273\4\77\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\4\12\1\274\7\12\1\275\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\5\12\1\276\3\12"+
+    "\1\277\1\12\1\300\1\301\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\17\12\1\302\3\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\10\12\1\303\7\12\1\304\2\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\305\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\12\12\1\306\10\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\307\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\4\12\1\310"+
+    "\16\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\12\12\1\311\10\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\12\12\1\312\10\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\11\12"+
+    "\1\313\11\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\10\12\1\314\12\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\10\12\1\315\12\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\316\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\317\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\4\12\1\320\16\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\1\321\2\12\1\0\5\12"+
+    "\3\0\14\12\1\322\6\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\16\12\1\323\4\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\324\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\325\1\326\1\0\3\12\1\0"+
+    "\5\12\3\0\12\12\1\327\1\12\1\330\6\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\13\12"+
+    "\1\331\7\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\12\1\332\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\333\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\1\12\1\334\1\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\12\12\1\335\10\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\1\12\1\336\1\12\1\0\5\12\3\0\11\12\1\337"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\1\12\1\340\1\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\10\12\1\341\1\12\1\342"+
+    "\10\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\11\12\1\343\11\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\344"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\345\11\12"+
+    "\1\346\10\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\347"+
+    "\1\12\1\0\5\12\3\0\1\12\1\350\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\1\351"+
+    "\22\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\352\1\12\1\0\3\12\1\0"+
+    "\5\12\3\0\10\12\1\353\12\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\1\12"+
+    "\1\354\1\0\3\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\355\1\0\3\12\1\0\5\12\3\0"+
+    "\14\12\1\356\6\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\357\1\360\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\361\1\362\2\12"+
+    "\1\363\2\12\1\364\7\12\22\0\3\12\1\365\3\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\11\12\1\366\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\367\1\12\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\14\12\1\370\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\1\12"+
+    "\1\371\1\0\3\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\11\12"+
+    "\1\372\2\12\1\373\6\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\374\10\12\1\375"+
+    "\10\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\11\12\1\376\11\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\11\12\1\377\11\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\1\u0100\2\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\1\12\1\u0101\1\12"+
+    "\1\0\5\12\3\0\1\u0102\22\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\4\12\1\u0103\12\12"+
+    "\1\u0104\3\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\u0105\22\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\u0106\22\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\u0107\1\u0108\1\0\3\12\1\0\5\12\3\0\20\12"+
+    "\1\u0109\2\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u010a\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\12\1\u010b\11\12"+
+    "\1\u010c\1\12\1\u010d\5\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u010e"+
+    "\1\0\3\12\1\0\5\12\3\0\1\u010f\10\12\1\u0110"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u0111\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u0112"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\10\12\1\u0113"+
+    "\5\12\1\u0114\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\11\12\1\u0115\11\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\11\12\1\u0116"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\11\12\1\u0117\11\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u0118\14\12\1\u0119"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\10\12\1\u011a\12\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u011b"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u011c"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\225\2\0"+
+    "\1\225\2\0\2\225\1\0\3\225\1\0\5\225\3\0"+
+    "\23\225\22\0\7\225\1\0\12\225\2\0\2\225\1\0"+
+    "\1\u011d\1\225\2\0\2\225\1\0\3\225\1\0\5\225"+
+    "\1\0\2\u011e\23\225\22\0\7\225\1\0\12\225\2\77"+
+    "\2\101\2\77\1\101\1\230\1\77\2\101\1\77\3\101"+
+    "\1\77\5\101\3\77\23\101\22\77\7\101\1\77\12\101"+
+    "\7\77\1\226\2\77\1\u011f\33\77\1\u0120\57\77\1\226"+
+    "\30\77\1\u0121\6\77\1\u0122\56\77\1\226\5\77\1\u0123"+
+    "\17\77\1\u0124\70\77\1\226\11\77\1\u0125\104\77\1\226"+
+    "\10\77\1\234\105\77\1\226\14\77\1\u0126\101\77\1\226"+
+    "\2\77\1\u0127\16\77\1\u0128\1\77\1\u0129\12\77\1\u012a"+
+    "\57\77\1\226\24\77\1\u012b\71\77\1\226\4\77\1\u012c"+
+    "\111\77\1\226\13\77\1\u012d\102\77\1\226\37\77\1\u012e"+
+    "\56\77\1\226\36\77\1\u012f\57\77\1\226\30\77\1\u0130"+
+    "\1\u0131\1\u0132\63\77\1\226\35\77\1\u0133\60\77\1\226"+
+    "\42\77\1\u0134\53\77\1\226\20\77\1\u0135\7\77\1\u0136"+
+    "\65\77\1\226\30\77\1\u0137\65\77\1\226\36\77\1\u0138"+
+    "\52\77\2\101\1\77\1\227\1\101\1\230\1\77\2\101"+
+    "\1\77\3\101\1\77\5\101\3\77\4\101\1\u0139\16\101"+
+    "\22\77\7\101\1\77\12\101\2\77\2\255\2\77\1\255"+
+    "\1\226\1\77\2\255\1\77\3\255\1\77\5\255\3\77"+
+    "\23\255\22\77\7\255\1\77\12\255\2\77\2\255\1\77"+
+    "\1\u013a\1\255\1\u013b\1\77\2\255\1\77\3\255\1\77"+
+    "\5\255\3\77\23\255\22\77\7\255\1\77\12\255\2\77"+
+    "\2\101\1\77\1\227\1\101\1\230\1\77\2\101\1\77"+
+    "\3\101\1\77\5\101\3\77\10\101\1\u013c\12\101\22\77"+
+    "\7\101\1\77\12\101\7\77\1\226\32\77\1\u013d\63\77"+
+    "\1\226\25\77\1\u013e\70\77\1\226\21\77\1\u013f\74\77"+
+    "\1\226\10\77\1\u0140\105\77\1\226\23\77\1\u0141\12\77"+
+    "\1\u0142\57\77\1\226\37\77\1\u0143\56\77\1\226\32\77"+
+    "\1\u0144\63\77\1\226\36\77\1\u0145\57\77\1\226\24\77"+
+    "\1\u0146\71\77\1\226\40\77\1\u0147\55\77\1\226\35\77"+
+    "\1\u0148\60\77\1\226\21\77\1\u0149\7\77\1\u014a\64\77"+
+    "\1\226\20\77\1\u014b\20\77\1\u014c\45\77\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u014d\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\12\1\u014e\6\12"+
+    "\1\u014f\12\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\12\1\u0150\21\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u0151\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\12\1\u0152\21\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u0153\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\4\12\1\u0154"+
+    "\16\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u0155\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\u0156\16\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\14\12"+
+    "\1\u0157\6\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\u0158\1\12\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\2\12\1\u0159\20\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\13\12"+
+    "\1\u015a\7\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\u015b"+
+    "\1\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\12\1\u015c\21\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\u015d\1\0\2\12\1\u015e\1\0"+
+    "\5\12\3\0\11\12\1\u015f\11\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\13\12\1\u0160\7\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\12\1\u0161\21\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\14\12\1\u0162\6\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\u0163\1\12\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\u0164\22\12\22\0\7\12\1\0\11\12\1\u0165\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\14\12\1\u0166\6\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\17\12\1\u0167"+
+    "\3\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\3\12\1\u0168\17\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u0169\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u016a\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\20\12\1\u016b\2\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\1\12\1\u016c\1\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\1\12\1\u016d\1\12\1\0"+
+    "\5\12\3\0\12\12\1\u016e\10\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\20\12\1\u016f\2\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\1\12\1\u0170\1\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\6\12\1\u0171\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\1\12"+
+    "\1\u0172\1\0\3\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\1\u0173"+
+    "\22\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\u0174\22\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\17\12\1\u0175\3\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\17\12\1\u0176"+
+    "\3\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\2\12\1\u0177\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\11\12\1\u0178\11\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u0179\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\20\12\1\u017a\2\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\12\12\1\u017b\10\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\10\12\1\u017c"+
+    "\12\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u017d\10\12\1\u017e\3\12\1\u017f\1\12"+
+    "\1\u0180\2\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\u0181"+
+    "\1\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u0182\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\12\1\u0183\10\12\1\u0184\10\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u0185\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u0186\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\20\12\1\u0187\2\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\u0188\1\12\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u0189\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\u018a\1\12\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\20\12\1\u018b\2\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u018c\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u018d\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\20\12\1\u018e"+
+    "\2\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\12\1\u018f\1\0\3\12\1\0"+
+    "\5\12\3\0\10\12\1\u0190\12\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\2\12\1\u0191\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\21\12"+
+    "\1\u0192\1\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\12\1\u0193\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u0194"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\5\12\1\u0195"+
+    "\15\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\1\12\1\u0196\1\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\14\12\1\u0197\6\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u0198\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\u0199\3\12\1\u019a\7\12\1\u019b\6\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\17\12\1\u019c\3\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\12\1\u019d\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u019e\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\11\12\1\u019f\11\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\17\12\1\u01a0\3\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\4\12\1\u01a1"+
+    "\16\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\12\1\u01a2\1\0\3\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\12\12\1\u01a3\10\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u01a4"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\10\12\1\u01a5\12\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\u01a6\22\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\2\12\1\u01a7"+
+    "\20\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u01a8\21\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\6\12\1\u01a9"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u01aa"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u01ab\21\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\1\12\1\u01ac\1\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\4\12"+
+    "\1\u01ad\16\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\u01ae"+
+    "\1\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u01af\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\4\12\1\u01b0\16\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\225\2\0\1\225\2\0\2\225\1\0\3\225\1\0"+
+    "\5\225\1\0\2\u011e\23\225\22\0\7\225\1\0\12\225"+
+    "\5\0\1\u01b1\1\u01b2\2\0\2\u01b2\1\0\3\u01b2\1\0"+
+    "\5\u01b2\3\0\23\u01b2\22\0\1\u01b2\2\0\4\u01b2\1\0"+
+    "\12\u01b2\7\77\1\226\3\77\1\u01b3\112\77\1\226\5\77"+
+    "\1\u01b4\110\77\1\226\31\77\1\u01b5\64\77\1\226\31\77"+
+    "\1\u01b6\64\77\1\226\6\77\1\u01b7\23\77\1\u01b8\63\77"+
+    "\1\226\3\77\1\u01b9\105\77\1\u01ba\1\u01bb\3\77\1\226"+
+    "\66\77\2\u01bb\26\77\1\226\12\77\1\u0125\103\77\1\226"+
+    "\3\77\1\u01bc\24\77\1\u01bd\65\77\1\226\22\77\1\u01be"+
+    "\73\77\1\226\24\77\1\u0124\71\77\1\226\2\77\1\u01bf"+
+    "\113\77\1\226\1\77\1\u01c0\114\77\1\226\25\77\1\u0124"+
+    "\70\77\1\226\27\77\1\u01c1\66\77\1\226\32\77\1\u01c2"+
+    "\63\77\1\226\5\77\1\u01c3\12\77\1\u01c4\47\77\1\u01c5"+
+    "\25\77\1\226\23\77\1\u01c6\72\77\1\226\21\77\1\u01c7"+
+    "\74\77\1\226\32\77\1\u01c8\63\77\1\226\30\77\1\u01c9"+
+    "\65\77\1\226\33\77\1\u01ca\62\77\1\226\22\77\1\u01cb"+
+    "\73\77\1\226\42\77\1\u01cc\53\77\1\226\5\77\1\u01cd"+
+    "\110\77\1\226\21\77\1\u01ce\67\77\2\101\1\77\1\227"+
+    "\1\101\1\230\1\77\2\101\1\77\3\101\1\77\5\101"+
+    "\3\77\16\101\1\u01cf\4\101\22\77\7\101\1\77\12\101"+
+    "\2\77\2\255\2\77\1\255\1\u013b\1\77\2\255\1\77"+
+    "\3\255\1\77\5\255\3\77\23\255\22\77\7\255\1\77"+
+    "\12\255\2\77\2\101\1\77\1\227\1\101\1\230\1\77"+
+    "\2\101\1\77\3\101\1\77\5\101\3\77\11\101\1\u01d0"+
+    "\11\101\22\77\7\101\1\77\12\101\7\77\1\226\40\77"+
+    "\1\u01d1\55\77\1\226\21\77\1\u01d2\74\77\1\226\25\77"+
+    "\1\u01d3\70\77\1\226\25\77\1\u01d4\70\77\1\226\24\77"+
+    "\1\u01d5\71\77\1\226\24\77\1\u01d6\71\77\1\226\37\77"+
+    "\1\u01d7\56\77\1\226\6\77\1\u01d8\107\77\1\226\5\77"+
+    "\1\u01d9\26\77\1\u01da\61\77\1\226\13\77\1\u01db\12\77"+
+    "\1\u01dc\67\77\1\226\2\77\1\u01dd\113\77\1\226\30\77"+
+    "\1\u01de\65\77\1\226\37\77\1\u01df\56\77\1\226\21\77"+
+    "\1\u01e0\6\77\1\u01e1\65\77\1\226\20\77\1\u01e2\75\77"+
+    "\1\226\30\77\1\u01e3\56\77\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\4\12\1\u01e4\16\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\20\12\1\u01e5\2\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\21\12\1\u01e6"+
+    "\1\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\4\12\1\u01e7\16\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\u01e8\1\12"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\u01e9\22\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\u01ea\22\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\2\12\1\u01eb"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u01ec\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\20\12"+
+    "\1\u01ed\2\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u01ee\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\4\12\1\u01ef\16\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u01f0\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u01f1\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u01f2\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\u01f3\22\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\u01f4\22\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u01f5\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u01f6\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u01f7\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u01f8\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\13\12\1\u01f9\7\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\21\12\1\u01fa\1\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\11\12\1\u01fb"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\12\1\u01fc\1\0\3\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\20\12\1\u01fd\2\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u01fe"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\11\12\1\u01ff\11\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\u0200\16\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u0201\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\12\1\u0202\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\16\12\1\u0203\4\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u0204\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\12\1\u0205\21\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\11\12\1\u0206\11\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\u0207\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\14\12\1\u0208\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\u0209\22\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\2\12"+
+    "\1\u020a\20\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\14\12\1\u020b\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\11\12\1\u020c\11\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\17\12\1\u020d\3\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\3\12\1\u020e\17\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\11\12\1\u020f"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\12\12\1\u0210\10\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\11\12\1\u0211\11\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\13\12"+
+    "\1\u0212\7\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\5\12\1\u0213\15\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\11\12\1\u0214\11\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u0215\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\11\12\1\u0216\11\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\12\12\1\u0217"+
+    "\10\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u0218\21\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\14\12\1\u0219\6\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\11\12"+
+    "\1\u021a\11\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\11\12\1\u021b\11\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\1\12\1\u021c\1\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\10\12\1\u021d\12\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\10\12\1\u021e\12\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\16\12\1\u021f"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\12\12\1\u0220\10\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u0221\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\u0222\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u0223\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\16\12\1\u0224\4\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u0225\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\3\12\1\u0226\17\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\3\12\1\u0227\17\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\u0228\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\u0229\22\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\1\u022a\2\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\u022b\1\12\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\10\12\1\u022c\12\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u022d\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\1\12\1\u022e\1\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\13\12\1\u022f\7\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\10\12\1\u0230\12\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\5\12"+
+    "\1\u0231\15\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u0232\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\2\12\1\u0233\20\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\u01b2\2\0\1\u01b2"+
+    "\2\0\2\u01b2\1\0\3\u01b2\1\0\5\u01b2\3\0\23\u01b2"+
+    "\22\0\7\u01b2\1\0\12\u01b2\2\0\2\u01b2\1\u0234\1\u0235"+
+    "\1\u01b2\2\0\2\u01b2\1\0\3\u01b2\1\0\5\u01b2\3\0"+
+    "\23\u01b2\22\0\7\u01b2\1\0\12\u01b2\5\77\1\u0236\1\u0237"+
+    "\1\226\1\77\2\u0237\1\77\3\u0237\1\77\5\u0237\3\77"+
+    "\23\u0237\22\77\1\u0237\2\77\4\u0237\1\77\12\u0237\7\77"+
+    "\1\226\30\77\1\u0238\65\77\1\226\22\77\1\u0239\73\77"+
+    "\1\226\3\77\1\u023a\112\77\1\226\3\77\1\u023b\112\77"+
+    "\1\226\34\77\1\u023c\57\77\1\u023d\1\u023e\1\226\1\77"+
+    "\2\u023e\1\77\3\u023e\1\77\5\u023e\3\77\23\u023e\22\77"+
+    "\1\u023e\2\77\4\u023e\1\77\12\u023e\7\77\1\226\3\77"+
+    "\1\u023f\105\77\2\u01bb\3\77\1\226\3\77\1\u023f\62\77"+
+    "\2\u01bb\26\77\1\226\20\77\1\u0240\10\77\1\u0241\1\77"+
+    "\1\u0242\1\u0243\1\77\1\u0244\57\77\1\226\2\77\1\u0245"+
+    "\113\77\1\226\3\77\1\u0246\112\77\1\u0247\116\77\1\226"+
+    "\36\77\1\u0248\57\77\1\226\3\77\1\u0249\112\77\1\226"+
+    "\40\77\1\u024a\55\77\1\226\30\77\1\u024b\65\77\1\226"+
+    "\36\77\1\u024c\57\77\1\226\40\77\1\u024d\55\77\1\226"+
+    "\5\77\1\u024e\110\77\1\226\41\77\1\u024f\54\77\1\226"+
+    "\5\77\1\u0250\110\77\1\226\24\77\1\u0251\71\77\1\226"+
+    "\21\77\1\u0252\74\77\1\u0253\114\77\1\u0254\1\77\1\226"+
+    "\116\77\1\226\40\77\1\u0255\55\77\1\226\22\77\1\u0256"+
+    "\66\77\2\101\1\77\1\227\1\101\1\u0257\1\77\2\101"+
+    "\1\77\3\101\1\77\5\101\3\77\23\101\22\77\7\101"+
+    "\1\77\12\101\2\77\2\101\1\77\1\227\1\101\1\230"+
+    "\1\77\1\101\1\u0258\1\77\3\101\1\77\5\101\3\77"+
+    "\23\101\22\77\7\101\1\77\12\101\7\77\1\226\24\77"+
+    "\1\u0259\71\77\1\226\25\77\1\u025a\70\77\1\226\32\77"+
+    "\1\u025b\63\77\1\226\21\77\1\u025c\74\77\1\226\34\77"+
+    "\1\u025d\61\77\1\226\1\77\1\u025e\114\77\1\226\36\77"+
+    "\1\u025f\55\77\1\u0260\1\77\1\226\116\77\1\226\30\77"+
+    "\1\u0261\65\77\1\226\36\77\1\u0262\57\77\1\226\21\77"+
+    "\1\u0263\74\77\1\226\36\77\1\u0264\57\77\1\226\13\77"+
+    "\1\u0265\12\77\1\u0266\67\77\1\226\24\77\1\u0267\71\77"+
+    "\1\226\36\77\1\u0268\57\77\1\226\41\77\1\u0269\54\77"+
+    "\1\226\24\77\1\u026a\71\77\1\226\21\77\1\u026b\74\77"+
+    "\1\226\2\77\1\u026c\104\77\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u026d\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\1\12"+
+    "\1\u026e\1\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\16\12\1\u026f"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\u0270\1\12\1\0\3\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u0271\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\1\12\1\u0272\1\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u0273\21\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\u0274\16\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\10\12"+
+    "\1\u0275\12\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\10\12\1\u0276\12\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\2\12\1\u0277\20\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\15\12\1\u0278\5\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\15\12\1\u0279\5\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\5\12\1\u027a"+
+    "\15\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\10\12\1\u027b\12\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u027c"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\14\12\1\u027d"+
+    "\6\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\u027e\22\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u027f\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u0280"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\5\12\1\u0281\15\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\u0282\1\12"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\16\12\1\u0283"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\12\1\u0284\1\0\3\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\1\12\1\u0285\21\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\11\12\1\u0286"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\1\u0287\2\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\10\12\1\u0288\12\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\10\12\1\u0289"+
+    "\12\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\4\12\1\u028a\16\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u028b"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\16\12\1\u028c"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\u028d\22\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\u028e\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u028f\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\12\1\u0290\21\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\u0291\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\11\12\1\u0292"+
+    "\11\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u0293\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\u0294\16\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\11\12"+
+    "\1\u0295\11\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\12\1\u0296\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\16\12\1\u0297\4\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\11\12"+
+    "\1\u0298\11\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\u0299"+
+    "\1\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\2\12\1\u029a\20\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\u029b\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\14\12\1\u029c\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\11\12\1\u029d\11\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\14\12\1\u029e\6\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\11\12\1\u029f\11\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\14\12\1\u02a0"+
+    "\6\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\11\12\1\u02a1\11\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\u02a2\16\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\13\12"+
+    "\1\u02a3\7\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u02a4\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\12\1\u02a5\21\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\10\12\1\u02a6\12\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\2\12\1\u02a7\20\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\12\12\1\u02a8"+
+    "\10\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\1\12\1\u02a9\1\0\3\12\1\0"+
+    "\5\12\3\0\4\12\1\u02aa\16\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\12\1\u02ab\1\12"+
+    "\1\u02ac\17\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u02ad\4\12\22\0\7\12\1\0"+
+    "\12\12\5\0\1\u02ae\1\u02af\2\0\2\u02af\1\0\3\u02af"+
+    "\1\0\5\u02af\3\0\23\u02af\22\0\1\u02af\2\0\4\u02af"+
+    "\1\0\12\u02af\2\0\2\u01b2\1\u0234\1\0\1\u01b2\2\0"+
+    "\2\u01b2\1\0\3\u01b2\1\0\5\u01b2\3\0\23\u01b2\22\0"+
+    "\7\u01b2\1\0\12\u01b2\2\77\2\u0237\2\77\1\u0237\1\226"+
+    "\1\77\2\u0237\1\77\3\u0237\1\77\5\u0237\3\77\23\u0237"+
+    "\22\77\7\u0237\1\77\12\u0237\2\77\2\u0237\1\77\1\u02b0"+
+    "\1\u0237\1\u02b1\1\77\2\u0237\1\77\3\u0237\1\77\5\u0237"+
+    "\3\77\23\u0237\22\77\7\u0237\1\77\12\u0237\7\77\1\226"+
+    "\23\77\1\u02b2\72\77\1\226\36\77\1\u02b3\55\77\1\u02b4"+
+    "\1\u02b5\1\226\1\77\2\u02b5\1\77\3\u02b5\1\77\5\u02b5"+
+    "\3\77\23\u02b5\22\77\1\u02b5\2\77\4\u02b5\1\77\12\u02b5"+
+    "\5\77\1\u02b6\1\u02b7\1\226\1\77\2\u02b7\1\77\3\u02b7"+
+    "\1\77\5\u02b7\3\77\23\u02b7\22\77\1\u02b7\2\77\4\u02b7"+
+    "\1\77\12\u02b7\7\77\1\226\6\77\1\u02b8\102\77\2\u023e"+
+    "\2\77\1\u023e\1\226\1\77\2\u023e\1\77\3\u023e\1\77"+
+    "\5\u023e\3\77\23\u023e\22\77\7\u023e\1\77\12\u023e\2\77"+
+    "\2\u023e\1\u02b9\1\u02ba\1\u023e\1\226\1\77\2\u023e\1\77"+
+    "\3\u023e\1\77\5\u023e\3\77\23\u023e\22\77\7\u023e\1\77"+
+    "\12\u023e\5\77\1\u02bb\1\u02bc\1\226\1\77\2\u02bc\1\77"+
+    "\3\u02bc\1\77\5\u02bc\3\77\23\u02bc\22\77\1\u02bc\2\77"+
+    "\4\u02bc\1\77\12\u02bc\7\77\1\226\2\77\1\u02bd\33\77"+
+    "\1\u02be\57\77\1\226\30\77\1\u02bf\5\77\1\u02c0\57\77"+
+    "\1\226\31\77\1\u02c1\64\77\1\226\32\77\1\u02c2\63\77"+
+    "\1\226\42\77\1\u02c3\53\77\1\226\36\77\1\u02c4\55\77"+
+    "\1\u02c5\1\u02c6\1\226\1\77\2\u02c6\1\77\3\u02c6\1\77"+
+    "\5\u02c6\3\77\23\u02c6\22\77\1\u02c6\2\77\4\u02c6\1\77"+
+    "\12\u02c6\7\77\1\226\42\77\1\u02c7\51\77\1\u02c8\1\u02c9"+
+    "\1\226\1\77\2\u02c9\1\77\3\u02c9\1\77\5\u02c9\3\77"+
+    "\23\u02c9\22\77\1\u02c9\2\77\4\u02c9\1\77\12\u02c9\7\77"+
+    "\1\226\24\77\1\u02ca\71\77\1\226\2\77\1\u02cb\113\77"+
+    "\1\226\2\77\1\u02cc\113\77\1\226\36\77\1\u02cd\57\77"+
+    "\1\226\32\77\1\u02ce\63\77\1\226\30\77\1\u02cf\65\77"+
+    "\1\u02d0\116\77\1\226\24\77\1\u02d1\71\77\1\226\31\77"+
+    "\1\u02d2\64\77\1\226\20\77\1\u02d3\75\77\1\226\36\77"+
+    "\1\u02d4\57\77\1\226\35\77\1\u02d5\53\77\2\101\1\77"+
+    "\1\227\1\101\1\u02d6\1\77\2\101\1\77\3\101\1\77"+
+    "\5\101\3\77\23\101\22\77\7\101\1\77\12\101\7\77"+
+    "\1\226\1\77\1\u02d7\114\77\1\226\32\77\1\u02d8\63\77"+
+    "\1\u02d9\116\77\1\226\25\77\1\u02da\66\77\1\u02db\1\77"+
+    "\1\u02dc\116\77\1\226\75\77\1\u02dd\20\77\1\226\1\77"+
+    "\1\u02de\114\77\1\226\31\77\1\u02df\64\77\1\226\2\77"+
+    "\1\u02e0\113\77\1\226\21\77\1\u02e1\74\77\1\226\22\77"+
+    "\1\u02e2\73\77\1\226\20\77\1\u02e3\75\77\1\226\21\77"+
+    "\1\u02e4\74\77\1\226\36\77\1\u02e5\57\77\1\226\24\77"+
+    "\1\u02e6\71\77\1\226\31\77\1\u02e7\64\77\1\226\21\77"+
+    "\1\u02e8\74\77\1\226\20\77\1\u02e9\75\77\1\226\22\77"+
+    "\1\u02ea\73\77\1\226\30\77\1\u02eb\56\77\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\u02ec\1\12\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u02ed"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\u02ee\1\12\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u02ef\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\1\12\1\u02f0\21\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u02f1\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\2\12\1\u02f2\20\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\2\12\1\u02f3\20\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\4\12\1\u02f4"+
+    "\16\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\12\12\1\u02f5\10\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\12\12\1\u02f6\10\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\3\12"+
+    "\1\u02f7\17\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\1\12\1\u02f8"+
+    "\1\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\1\u02f9\22\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\u02fa\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\u02fb\22\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\u02fc\1\12\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\10\12\1\u02fd\12\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u02fe\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\1\u02ff\22\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\3\12"+
+    "\1\u0300\3\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\20\12\1\u0301\2\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\14\12\1\u0302\6\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u0303\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\1\12\1\u0304\21\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\u0305\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u0306"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\4\12\1\u0307\16\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\1\12\1\u0308\1\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u0309\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\1\12\1\u030a\21\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\1\u030b"+
+    "\1\12\1\0\3\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u030c\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u030d\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u030e\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u030f\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\12\1\u0310\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\17\12\1\u0311\3\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\10\12\1\u0312\12\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\1\12\1\u0313\1\0"+
+    "\3\12\1\0\5\12\3\0\23\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\4\12\1\u0314\16\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\u0315\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u0316\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\1\12"+
+    "\1\u0317\1\0\3\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\u0318\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u0319\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u031a\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\1\12"+
+    "\1\u031b\21\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\12\1\u031c\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\14\12\1\u031d\6\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\11\12"+
+    "\1\u031e\11\12\22\0\7\12\1\0\12\12\2\0\2\u02af"+
+    "\2\0\1\u02af\2\0\2\u02af\1\0\3\u02af\1\0\5\u02af"+
+    "\3\0\23\u02af\22\0\7\u02af\1\0\12\u02af\2\0\2\u02af"+
+    "\1\0\1\u031f\1\u02af\2\0\2\u02af\1\0\3\u02af\1\0"+
+    "\5\u02af\3\0\23\u02af\22\0\7\u02af\1\0\12\u02af\2\77"+
+    "\2\u0237\2\77\1\u0237\1\u02b1\1\77\2\u0237\1\77\3\u0237"+
+    "\1\77\5\u0237\3\77\23\u0237\22\77\7\u0237\1\77\12\u0237"+
+    "\7\77\1\u0320\71\77\1\u0321\24\77\1\226\2\77\1\u0322"+
+    "\106\77\2\u02b5\2\77\1\u02b5\1\226\1\77\2\u02b5\1\77"+
+    "\3\u02b5\1\77\5\u02b5\3\77\23\u02b5\22\77\7\u02b5\1\77"+
+    "\12\u02b5\2\77\2\u02b5\1\77\1\u0323\1\u02b5\1\u0324\1\77"+
+    "\2\u02b5\1\77\3\u02b5\1\77\5\u02b5\3\77\23\u02b5\22\77"+
+    "\7\u02b5\1\77\12\u02b5\2\77\2\u02b7\2\77\1\u02b7\1\226"+
+    "\1\77\2\u02b7\1\77\3\u02b7\1\77\5\u02b7\3\77\23\u02b7"+
+    "\22\77\7\u02b7\1\77\12\u02b7\2\77\2\u02b7\1\77\1\u0325"+
+    "\1\u02b7\1\u0326\1\77\2\u02b7\1\77\3\u02b7\1\77\5\u02b7"+
+    "\3\77\23\u02b7\22\77\7\u02b7\1\77\12\u02b7\7\77\1\226"+
+    "\66\77\1\u0327\1\u0328\24\77\1\u0329\1\u032a\1\226\1\77"+
+    "\2\u032a\1\77\3\u032a\1\77\5\u032a\3\77\23\u032a\22\77"+
+    "\1\u032a\2\77\4\u032a\1\77\12\u032a\2\77\2\u023e\1\u02b9"+
+    "\1\77\1\u023e\1\226\1\77\2\u023e\1\77\3\u023e\1\77"+
+    "\5\u023e\3\77\23\u023e\22\77\7\u023e\1\77\12\u023e\2\77"+
+    "\2\u02bc\2\77\1\u02bc\1\226\1\77\2\u02bc\1\77\3\u02bc"+
+    "\1\77\5\u02bc\3\77\23\u02bc\22\77\7\u02bc\1\77\12\u02bc"+
+    "\2\77\2\u02bc\1\77\1\u032b\1\u02bc\1\226\1\77\2\u02bc"+
+    "\1\77\3\u02bc\1\77\5\u02bc\1\u032c\2\77\23\u02bc\22\77"+
+    "\7\u02bc\1\77\12\u02bc\7\77\1\226\30\77\1\u032d\1\77"+
+    "\1\u032e\63\77\1\226\2\77\1\u032f\21\77\1\u0330\71\77"+
+    "\1\226\24\77\1\u0331\71\77\1\226\20\77\1\u0332\13\77"+
+    "\1\u0333\61\77\1\226\36\77\1\u0334\57\77\1\226\40\77"+
+    "\1\u0335\55\77\1\226\33\77\1\u0336\60\77\1\u0337\1\77"+
+    "\1\226\37\77\1\u0338\51\77\2\u02c6\2\77\1\u02c6\1\226"+
+    "\1\77\2\u02c6\1\77\3\u02c6\1\77\5\u02c6\3\77\23\u02c6"+
+    "\22\77\7\u02c6\1\77\12\u02c6\2\77\2\u02c6\1\77\1\u0339"+
+    "\1\u02c6\1\u033a\1\77\2\u02c6\1\77\3\u02c6\1\77\5\u02c6"+
+    "\3\77\23\u02c6\22\77\7\u02c6\1\77\12\u02c6\7\77\1\u033b"+
+    "\111\77\2\u02c9\2\77\1\u02c9\1\226\1\77\2\u02c9\1\77"+
+    "\3\u02c9\1\77\5\u02c9\3\77\23\u02c9\22\77\7\u02c9\1\77"+
+    "\12\u02c9\2\77\2\u02c9\1\u033c\1\u033d\1\u02c9\1\226\1\77"+
+    "\2\u02c9\1\77\3\u02c9\1\77\5\u02c9\3\77\23\u02c9\22\77"+
+    "\7\u02c9\1\77\12\u02c9\7\77\1\226\2\77\1\u033e\113\77"+
+    "\1\226\21\77\1\u033f\74\77\1\u0340\116\77\1\226\20\77"+
+    "\1\u0341\75\77\1\226\30\77\1\u0342\65\77\1\226\2\77"+
+    "\1\u0343\113\77\1\226\36\77\1\u0344\57\77\1\226\36\77"+
+    "\1\u0345\57\77\1\226\21\77\1\u0346\74\77\1\u0347\116\77"+
+    "\1\226\2\77\1\u0348\111\77\1\u0349\1\77\1\226\114\77"+
+    "\1\u034a\1\77\1\u034b\116\77\1\226\32\77\1\u034c\63\77"+
+    "\1\226\75\77\1\u034d\20\77\1\226\36\77\1\u034e\57\77"+
+    "\1\226\21\77\1\u034f\74\77\1\226\36\77\1\u0350\57\77"+
+    "\1\226\21\77\1\u0351\74\77\1\226\41\77\1\u0352\54\77"+
+    "\1\226\24\77\1\u0353\71\77\1\226\20\77\1\u0354\75\77"+
+    "\1\226\22\77\1\u0355\73\77\1\226\20\77\1\u0356\75\77"+
+    "\1\226\36\77\1\u0357\57\77\1\226\13\77\1\u0358\61\77"+
+    "\1\u0359\7\77\1\u035a\10\77\1\226\30\77\1\u035b\65\77"+
+    "\1\226\21\77\1\u035c\74\77\1\226\24\77\1\u035d\71\77"+
+    "\1\226\31\77\1\u035e\55\77\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\4\12\1\u035f\16\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\14\12\1\u0360\6\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u0361"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u0362\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\1\12\1\u0363\1\12\1\0\5\12\3\0\23\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\u0364\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u0365\21\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u0366\21\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\20\12"+
+    "\1\u0367\2\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\14\12\1\u0368\6\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\20\12\1\u0369\2\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\12\1\u036a\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\1\12\1\u036b\1\0\3\12"+
+    "\1\0\5\12\3\0\23\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\12\1\u036c\14\12\1\u036d"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\u036e\22\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u036f\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\4\12\1\u0370"+
+    "\16\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\14\12\1\u0371\6\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\3\12\1\u0372\17\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\17\12"+
+    "\1\u0373\3\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\21\12\1\u0374\1\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\4\12\1\u0375\16\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\1\12\1\u0376\1\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u0377\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\12\1\u0378"+
+    "\21\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\1\12\1\u0379\21\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\10\12\1\u037a\12\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\4\12"+
+    "\1\u037b\16\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\12\12\1\u037c\10\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\10\12\1\u037d\12\12"+
+    "\22\0\7\12\1\0\12\12\7\77\1\226\21\77\1\u037e"+
+    "\74\77\1\u037f\111\77\2\u02b5\2\77\1\u02b5\1\u0324\1\77"+
+    "\2\u02b5\1\77\3\u02b5\1\77\5\u02b5\3\77\23\u02b5\22\77"+
+    "\7\u02b5\1\77\12\u02b5\2\77\2\u02b7\2\77\1\u02b7\1\u0326"+
+    "\1\77\2\u02b7\1\77\3\u02b7\1\77\5\u02b7\3\77\23\u02b7"+
+    "\22\77\7\u02b7\1\77\12\u02b7\7\77\1\u0380\116\77\1\u0381"+
+    "\111\77\2\u032a\2\77\1\u032a\1\226\1\77\2\u032a\1\77"+
+    "\3\u032a\1\77\5\u032a\3\77\23\u032a\22\77\7\u032a\1\77"+
+    "\12\u032a\2\77\2\u032a\1\77\1\u0382\1\u032a\1\226\1\77"+
+    "\2\u032a\1\77\3\u032a\1\77\5\u032a\1\77\2\u0383\23\u032a"+
+    "\22\77\7\u032a\1\77\12\u032a\2\77\2\u02bc\2\77\1\u02bc"+
+    "\1\226\1\77\2\u02bc\1\77\3\u02bc\1\77\5\u02bc\1\u032c"+
+    "\2\77\23\u02bc\22\77\7\u02bc\1\77\12\u02bc\5\77\1\u0384"+
+    "\1\u0385\1\226\1\77\2\u0385\1\77\3\u0385\1\77\5\u0385"+
+    "\3\77\23\u0385\22\77\1\u0385\2\77\4\u0385\1\77\12\u0385"+
+    "\7\77\1\226\24\77\1\u0386\4\77\1\u0387\64\77\1\226"+
+    "\33\77\1\u0388\57\77\1\u0389\2\77\1\226\116\77\1\226"+
+    "\1\77\1\u038a\114\77\1\226\1\77\1\u038b\114\77\1\226"+
+    "\36\77\1\u038c\57\77\1\226\36\77\1\u038d\57\77\1\226"+
+    "\20\77\1\u038e\10\77\1\u038f\4\77\1\u0390\57\77\1\226"+
+    "\24\77\1\u0391\71\77\1\226\21\77\1\u0392\74\77\1\226"+
+    "\30\77\1\u0393\65\77\1\226\30\77\1\u0394\60\77\2\u02c6"+
+    "\2\77\1\u02c6\1\u033a\1\77\2\u02c6\1\77\3\u02c6\1\77"+
+    "\5\u02c6\3\77\23\u02c6\22\77\7\u02c6\1\77\12\u02c6\5\77"+
+    "\1\u0395\1\u0396\1\226\1\77\2\u0396\1\77\3\u0396\1\77"+
+    "\5\u0396\3\77\23\u0396\22\77\1\u0396\2\77\4\u0396\1\77"+
+    "\12\u0396\2\77\2\u02c9\1\u033c\1\77\1\u02c9\1\226\1\77"+
+    "\2\u02c9\1\77\3\u02c9\1\77\5\u02c9\3\77\23\u02c9\22\77"+
+    "\7\u02c9\1\77\12\u02c9\7\77\1\u0397\116\77\1\226\32\77"+
+    "\1\u0398\63\77\1\226\2\77\1\u0399\113\77\1\226\1\77"+
+    "\1\u039a\114\77\1\226\36\77\1\u039b\57\77\1\226\5\77"+
+    "\1\u039c\110\77\1\u039d\116\77\1\226\65\77\1\u039e\30\77"+
+    "\1\u039f\116\77\1\226\31\77\1\u03a0\64\77\1\226\75\77"+
+    "\1\u03a1\16\77\1\u03a2\1\77\1\u03a3\116\77\1\226\36\77"+
+    "\1\u03a4\57\77\1\226\70\77\1\u03a5\25\77\1\226\30\77"+
+    "\1\u03a6\65\77\1\226\70\77\1\u03a7\25\77\1\226\32\77"+
+    "\1\u03a8\63\77\1\226\36\77\1\u03a9\57\77\1\226\30\77"+
+    "\1\u03aa\65\77\1\226\30\77\1\u03ab\65\77\1\226\24\77"+
+    "\1\u03ac\71\77\1\226\20\77\1\u03ad\75\77\1\226\5\77"+
+    "\1\u03ae\110\77\1\226\36\77\1\u03af\57\77\1\226\36\77"+
+    "\1\u03b0\57\77\1\226\42\77\1\u03b1\53\77\1\226\5\77"+
+    "\1\u03b2\110\77\1\226\2\77\1\u03b3\113\77\1\226\37\77"+
+    "\1\u03b4\56\77\1\226\10\77\1\u03b5\2\77\1\u03b6\55\77"+
+    "\1\u03b7\3\77\1\u03b8\2\77\1\u03b9\1\u03ba\1\77\1\u03bb"+
+    "\1\u03bc\1\u03bd\1\77\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\14\12"+
+    "\1\u03be\6\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u03bf\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\12\12\1\u03c0\10\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\1\u03c1\1\12\1\0\3\12\1\0\5\12"+
+    "\3\0\23\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\23\12\22\0\1\u03c2\6\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\12\12\1\u03c3\10\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\10\12"+
+    "\1\u03c4\12\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u03c5\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\16\12\1\u03c6\4\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\16\12\1\u03c7\4\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\12\12\1\u03c8\10\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\u03c9\22\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\2\12\1\u03ca\20\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u03cb\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\16\12\1\u03cc"+
+    "\4\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\16\12\1\u03cd\4\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\14\12\1\u03ce\6\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\u03cf\1\12\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\4\12\1\u03d0\16\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\12\12\1\u03d1\10\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\1\12\1\u03d2\1\0\3\12\1\0\5\12\3\0"+
+    "\23\12\22\0\7\12\1\0\12\12\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\4\12\1\u03d3\16\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\1\12\1\u03d4"+
+    "\1\0\3\12\1\0\5\12\3\0\23\12\22\0\7\12"+
+    "\1\0\12\12\7\77\1\226\20\77\1\u03d5\70\77\2\u032a"+
+    "\2\77\1\u032a\1\226\1\77\2\u032a\1\77\3\u032a\1\77"+
+    "\5\u032a\1\77\2\u0383\23\u032a\22\77\7\u032a\1\77\12\u032a"+
+    "\5\77\1\u03d6\1\u03d7\1\226\1\77\2\u03d7\1\77\3\u03d7"+
+    "\1\77\5\u03d7\3\77\23\u03d7\22\77\1\u03d7\2\77\4\u03d7"+
+    "\1\77\12\u03d7\2\77\2\u0385\2\77\1\u0385\1\226\1\77"+
+    "\2\u0385\1\77\3\u0385\1\77\5\u0385\3\77\23\u0385\22\77"+
+    "\7\u0385\1\77\12\u0385\2\77\2\u0385\1\77\1\u03d8\1\u0385"+
+    "\1\u03d9\1\77\2\u0385\1\77\3\u0385\1\77\5\u0385\3\77"+
+    "\23\u0385\22\77\7\u0385\1\77\12\u0385\7\77\1\226\1\77"+
+    "\1\u03da\114\77\1\226\2\77\1\u03db\113\77\1\u03dc\114\77"+
+    "\1\u03dd\1\u03de\1\226\1\77\2\u03de\1\77\3\u03de\1\77"+
+    "\5\u03de\3\77\23\u03de\22\77\1\u03de\2\77\4\u03de\1\77"+
+    "\12\u03de\4\77\1\u03df\2\77\1\226\116\77\1\226\32\77"+
+    "\1\u03e0\63\77\1\226\2\77\1\u03e1\113\77\1\226\21\77"+
+    "\1\u03e2\74\77\1\226\36\77\1\u03e3\57\77\1\226\36\77"+
+    "\1\u03e4\57\77\1\226\42\77\1\u03e5\53\77\1\226\2\77"+
+    "\1\u03e6\113\77\1\226\31\77\1\u03e7\64\77\1\226\34\77"+
+    "\1\u03e8\61\77\1\226\34\77\1\u03e9\54\77\2\u0396\2\77"+
+    "\1\u0396\1\226\1\77\2\u0396\1\77\3\u0396\1\77\5\u0396"+
+    "\3\77\23\u0396\22\77\7\u0396\1\77\12\u0396\2\77\2\u0396"+
+    "\1\77\1\u03ea\1\u0396\1\u03eb\1\77\2\u0396\1\77\3\u0396"+
+    "\1\77\5\u0396\3\77\23\u0396\22\77\7\u0396\1\77\12\u0396"+
+    "\7\77\1\226\24\77\1\u03ec\71\77\1\u03ed\116\77\1\u03ee"+
+    "\116\77\1\u03ef\116\77\1\u03f0\116\77\1\226\36\77\1\u03f1"+
+    "\57\77\1\226\30\77\1\u03f2\65\77\1\226\36\77\1\u03f3"+
+    "\57\77\1\226\75\77\1\u03f4\20\77\1\226\5\77\1\u03f5"+
+    "\110\77\1\226\40\77\1\u03f6\55\77\1\226\2\77\1\u03f7"+
+    "\113\77\1\226\40\77\1\u03f8\55\77\1\226\24\77\1\u03f9"+
+    "\71\77\1\226\75\77\1\u03fa\4\77\1\u03fb\13\77\1\226"+
+    "\5\77\1\u03fc\110\77\1\226\22\77\1\u03fd\73\77\1\226"+
+    "\30\77\1\u03fe\65\77\1\226\30\77\1\u03ff\65\77\1\u0400"+
+    "\116\77\1\226\2\77\1\u0401\113\77\1\226\20\77\1\u0402"+
+    "\75\77\1\226\33\77\1\u0403\62\77\1\226\75\77\1\u0404"+
+    "\20\77\1\226\21\77\1\u0405\74\77\1\226\36\77\1\u0406"+
+    "\57\77\1\226\5\77\1\u0407\110\77\1\226\2\77\1\u0408"+
+    "\33\77\1\u0409\57\77\1\226\30\77\1\u040a\65\77\1\226"+
+    "\30\77\1\u040b\5\77\1\u040c\57\77\1\226\30\77\1\u040d"+
+    "\1\77\1\u040e\63\77\1\226\21\77\1\u040f\7\77\1\u0410"+
+    "\64\77\1\226\32\77\1\u0411\63\77\1\226\31\77\1\u0412"+
+    "\64\77\1\226\42\77\1\u0413\44\77\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\3\12\1\u0414\17\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\4\12\1\u0415\16\12\22\0"+
+    "\7\12\1\0\12\12\2\0\2\12\1\75\1\76\1\12"+
+    "\2\0\2\12\1\0\3\12\1\0\5\12\3\0\16\12"+
+    "\1\u0416\4\12\22\0\7\12\1\0\12\12\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\16\12\1\u0417\4\12\22\0\7\12\1\0"+
+    "\12\12\2\0\2\12\1\75\1\76\1\12\2\0\2\12"+
+    "\1\0\3\12\1\0\5\12\3\0\4\12\1\u0418\16\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\1\12\1\u0419\1\12\1\0"+
+    "\5\12\3\0\23\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\4\12\1\u041a\16\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\2\12\1\0\3\12\1\0\5\12\3\0\1\u041b\22\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\4\12\1\u041c\16\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\16\12\1\u041d\4\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u041e\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\4\12\1\u041f\16\12\22\0\7\12\1\0\12\12\2\0"+
+    "\2\12\1\75\1\76\1\12\2\0\2\12\1\0\3\12"+
+    "\1\0\5\12\3\0\1\12\1\u0420\21\12\22\0\7\12"+
+    "\1\0\12\12\7\77\1\226\2\77\1\u0421\106\77\2\u03d7"+
+    "\2\77\1\u03d7\1\226\1\77\2\u03d7\1\77\3\u03d7\1\77"+
+    "\5\u03d7\3\77\23\u03d7\22\77\7\u03d7\1\77\12\u03d7\2\77"+
+    "\2\u03d7\1\u0422\1\u0423\1\u03d7\1\226\1\77\2\u03d7\1\77"+
+    "\3\u03d7\1\77\5\u03d7\3\77\23\u03d7\22\77\7\u03d7\1\77"+
+    "\12\u03d7\2\77\2\u0385\2\77\1\u0385\1\u03d9\1\77\2\u0385"+
+    "\1\77\3\u0385\1\77\5\u0385\3\77\23\u0385\22\77\7\u0385"+
+    "\1\77\12\u0385\7\77\1\226\30\77\1\u0424\65\77\1\u0425"+
+    "\111\77\2\u03de\2\77\1\u03de\1\226\1\77\2\u03de\1\77"+
+    "\3\u03de\1\77\5\u03de\3\77\23\u03de\22\77\7\u03de\1\77"+
+    "\12\u03de\2\77\2\u03de\1\u0426\1\u0427\1\u03de\1\226\1\77"+
+    "\2\u03de\1\77\3\u03de\1\77\5\u03de\3\77\23\u03de\22\77"+
+    "\7\u03de\1\77\12\u03de\5\77\1\u0428\1\u0429\1\226\1\77"+
+    "\2\u0429\1\77\3\u0429\1\77\5\u0429\3\77\23\u0429\22\77"+
+    "\1\u0429\2\77\4\u0429\1\77\12\u0429\7\77\1\226\37\77"+
+    "\1\u042a\53\77\1\u042b\2\77\1\226\116\77\1\226\41\77"+
+    "\1\u042c\54\77\1\226\2\77\1\u042d\21\77\1\u042e\71\77"+
+    "\1\226\20\77\1\u042f\13\77\1\u0430\61\77\1\226\33\77"+
+    "\1\u0431\57\77\1\u0432\2\77\1\226\116\77\1\226\36\77"+
+    "\1\u0433\57\77\1\226\2\77\1\u0434\113\77\1\226\35\77"+
+    "\1\u0435\53\77\2\u0396\2\77\1\u0396\1\u03eb\1\77\2\u0396"+
+    "\1\77\3\u0396\1\77\5\u0396\3\77\23\u0396\22\77\7\u0396"+
+    "\1\77\12\u0396\7\77\1\u0436\116\77\1\u0437\116\77\1\226"+
+    "\24\77\1\u0438\71\77\1\226\5\77\1\u0439\110\77\1\226"+
+    "\36\77\1\u043a\57\77\1\u043b\116\77\1\226\36\77\1\u043c"+
+    "\57\77\1\226\36\77\1\u043d\57\77\1\226\36\77\1\u043e"+
+    "\57\77\1\u043f\116\77\1\226\36\77\1\u0440\57\77\1\226"+
+    "\34\77\1\u0441\61\77\1\226\10\77\1\u0442\105\77\1\226"+
+    "\36\77\1\u0443\57\77\1\226\5\77\1\u0444\110\77\1\226"+
+    "\22\77\1\u0445\73\77\1\226\26\77\1\u0446\67\77\1\226"+
+    "\36\77\1\u0447\57\77\1\226\21\77\1\u0448\74\77\1\226"+
+    "\36\77\1\u0449\57\77\1\226\32\77\1\u044a\63\77\1\226"+
+    "\24\77\1\u044b\71\77\1\226\32\77\1\u044c\63\77\1\226"+
+    "\30\77\1\u044d\1\77\1\u044e\63\77\1\226\2\77\1\u044f"+
+    "\21\77\1\u0450\71\77\1\226\2\77\1\u0451\113\77\1\226"+
+    "\24\77\1\u0452\71\77\1\226\20\77\1\u0453\13\77\1\u0454"+
+    "\61\77\1\226\5\77\1\u0455\110\77\1\226\40\77\1\u0456"+
+    "\55\77\1\226\37\77\1\u0457\56\77\1\226\30\77\1\u0458"+
+    "\65\77\1\226\21\77\1\u0459\74\77\1\226\36\77\1\u045a"+
+    "\57\77\1\226\33\77\1\u045b\53\77\2\0\2\12\1\75"+
+    "\1\76\1\12\2\0\2\12\1\0\3\12\1\0\5\12"+
+    "\3\0\11\12\1\u045c\11\12\22\0\7\12\1\0\12\12"+
+    "\2\0\2\12\1\75\1\76\1\12\2\0\2\12\1\0"+
+    "\3\12\1\0\5\12\3\0\1\u045d\22\12\22\0\7\12"+
+    "\1\0\12\12\2\0\2\12\1\75\1\76\1\12\2\0"+
+    "\1\12\1\u045e\1\0\3\12\1\0\5\12\3\0\23\12"+
+    "\22\0\7\12\1\0\12\12\2\0\2\12\1\75\1\76"+
+    "\1\12\2\0\2\12\1\0\3\12\1\0\5\12\3\0"+
+    "\12\12\1\u045f\10\12\22\0\7\12\1\0\12\12\7\77"+
+    "\1\226\31\77\1\u0460\62\77\1\u0461\1\u0462\1\226\1\77"+
+    "\2\u0462\1\77\3\u0462\1\77\5\u0462\3\77\23\u0462\22\77"+
+    "\1\u0462\2\77\4\u0462\1\77\12\u0462\2\77\2\u03d7\1\u0422"+
+    "\1\77\1\u03d7\1\226\1\77\2\u03d7\1\77\3\u03d7\1\77"+
+    "\5\u03d7\3\77\23\u03d7\22\77\7\u03d7\1\77\12\u03d7\7\77"+
+    "\1\226\31\77\1\u0463\57\77\1\u0464\1\u0465\3\77\1\226"+
+    "\66\77\2\u0465\21\77\2\u03de\1\u0426\1\77\1\u03de\1\226"+
+    "\1\77\2\u03de\1\77\3\u03de\1\77\5\u03de\3\77\23\u03de"+
+    "\22\77\7\u03de\1\77\12\u03de\2\77\2\u0429\2\77\1\u0429"+
+    "\1\226\1\77\2\u0429\1\77\3\u0429\1\77\5\u0429\3\77"+
+    "\23\u0429\22\77\7\u0429\1\77\12\u0429\2\77\2\u0429\1\u0466"+
+    "\1\u0467\1\u0429\1\226\1\77\2\u0429\1\77\3\u0429\1\77"+
+    "\5\u0429\3\77\23\u0429\22\77\7\u0429\1\77\12\u0429\4\77"+
+    "\1\u0468\2\77\1\226\114\77\1\u0469\1\u046a\1\226\1\77"+
+    "\2\u046a\1\77\3\u046a\1\77\5\u046a\3\77\23\u046a\22\77"+
+    "\1\u046a\2\77\4\u046a\1\77\12\u046a\7\77\1\226\36\77"+
+    "\1\u046b\54\77\1\u046c\2\77\1\226\116\77\1\226\1\77"+
+    "\1\u046d\114\77\1\226\36\77\1\u046e\57\77\1\226\36\77"+
+    "\1\u046f\57\77\1\226\21\77\1\u0470\72\77\1\u0471\1\u0472"+
+    "\1\226\1\77\2\u0472\1\77\3\u0472\1\77\5\u0472\3\77"+
+    "\23\u0472\22\77\1\u0472\2\77\4\u0472\1\77\12\u0472\4\77"+
+    "\1\u0473\2\77\1\226\116\77\1\226\21\77\1\u0474\74\77"+
+    "\1\226\21\77\1\u0475\74\77\1\226\1\77\1\u0476\114\77"+
+    "\1\u0477\116\77\1\226\5\77\1\u0478\110\77\1\226\20\77"+
+    "\1\u0479\73\77\1\u047a\1\77\1\226\116\77\1\226\20\77"+
+    "\1\u047b\75\77\1\226\70\77\1\u047c\25\77\1\226\2\77"+
+    "\1\u047d\113\77\1\226\21\77\1\u047e\74\77\1\u047f\116\77"+
+    "\1\226\10\77\1\u0480\105\77\1\226\36\77\1\u0481\57\77"+
+    "\1\226\20\77\1\u0482\75\77\1\226\2\77\1\u0483\113\77"+
+    "\1\226\31\77\1\u0484\64\77\1\226\70\77\1\u0485\25\77"+
+    "\1\226\24\77\1\u0486\71\77\1\226\2\77\1\u0487\113\77"+
+    "\1\226\34\77\1\u0488\61\77\1\226\2\77\1\u0489\21\77"+
+    "\1\u048a\4\77\1\u048b\64\77\1\226\33\77\1\u048c\62\77"+
+    "\1\226\101\77\1\u048d\14\77\1\226\1\77\1\u048e\114\77"+
+    "\1\226\30\77\1\u048f\65\77\1\226\1\77\1\u0490\114\77"+
+    "\1\226\36\77\1\u0491\57\77\1\226\36\77\1\u0492\57\77"+
+    "\1\226\34\77\1\u0493\61\77\1\226\24\77\1\u0494\71\77"+
+    "\1\226\36\77\1\u0495\57\77\1\226\24\77\1\u0496\71\77"+
+    "\1\226\1\77\1\u0497\114\77\1\226\13\77\1\u0498\61\77"+
+    "\1\u0499\20\77\1\226\21\77\1\u049a\65\77\2\0\2\12"+
+    "\1\75\1\76\1\12\2\0\2\12\1\0\3\12\1\0"+
+    "\5\12\3\0\4\12\1\u049b\16\12\22\0\7\12\1\0"+
+    "\12\12\7\77\1\226\21\77\1\u049c\67\77\2\u0462\2\77"+
+    "\1\u0462\1\226\1\77\2\u0462\1\77\3\u0462\1\77\5\u0462"+
+    "\3\77\23\u0462\22\77\7\u0462\1\77\12\u0462\2\77\2\u0462"+
+    "\1\77\1\u049d\1\u0462\1\u049e\1\77\2\u0462\1\77\3\u0462"+
+    "\1\77\5\u0462\3\77\23\u0462\22\77\7\u0462\1\77\12\u0462"+
+    "\7\77\1\226\1\77\1\u049f\114\77\1\u04a0\111\77\2\u0465"+
+    "\3\77\1\u04a0\66\77\2\u0465\21\77\1\u04a1\1\u04a2\3\77"+
+    "\1\226\66\77\2\u04a2\21\77\2\u0429\1\u0466\1\77\1\u0429"+
+    "\1\226\1\77\2\u0429\1\77\3\u0429\1\77\5\u0429\3\77"+
+    "\23\u0429\22\77\7\u0429\1\77\12\u0429\2\77\1\u04a3\1\u04a4"+
+    "\3\77\1\226\66\77\2\u04a4\21\77\2\u046a\2\77\1\u046a"+
+    "\1\226\1\77\2\u046a\1\77\3\u046a\1\77\5\u046a\3\77"+
+    "\23\u046a\22\77\7\u046a\1\77\12\u046a\2\77\2\u046a\1\u04a5"+
+    "\1\u04a6\1\u046a\1\226\1\77\2\u046a\1\77\3\u046a\1\77"+
+    "\5\u046a\3\77\23\u046a\22\77\7\u046a\1\77\12\u046a\4\77"+
+    "\1\u04a7\2\77\1\226\114\77\1\u04a8\1\u04a9\1\226\1\77"+
+    "\2\u04a9\1\77\3\u04a9\1\77\5\u04a9\3\77\23\u04a9\22\77"+
+    "\1\u04a9\2\77\4\u04a9\1\77\12\u04a9\4\77\1\u04aa\2\77"+
+    "\1\226\116\77\1\226\2\77\1\u04ab\113\77\1\226\21\77"+
+    "\1\u04ac\74\77\1\226\31\77\1\u04ad\57\77\2\u0472\2\77"+
+    "\1\u0472\1\226\1\77\2\u0472\1\77\3\u0472\1\77\5\u0472"+
+    "\3\77\23\u0472\22\77\7\u0472\1\77\12\u0472\2\77\2\u0472"+
+    "\1\u04ae\1\u04af\1\u0472\1\226\1\77\2\u0472\1\77\3\u0472"+
+    "\1\77\5\u0472\3\77\23\u0472\22\77\7\u0472\1\77\12\u0472"+
+    "\5\77\1\u04b0\1\u04b1\1\226\1\77\2\u04b1\1\77\3\u04b1"+
+    "\1\77\5\u04b1\3\77\23\u04b1\22\77\1\u04b1\2\77\4\u04b1"+
+    "\1\77\12\u04b1\7\77\1\226\32\77\1\u04b2\63\77\1\226"+
+    "\24\77\1\u04b3\71\77\1\226\32\77\1\u04b4\63\77\1\u04b5"+
+    "\116\77\1\226\2\77\1\u04b6\113\77\1\226\31\77\1\u04b7"+
+    "\64\77\1\226\2\77\1\u04b8\113\77\1\226\40\77\1\u04b9"+
+    "\55\77\1\226\21\77\1\u04ba\74\77\1\226\24\77\1\u04bb"+
+    "\71\77\1\226\21\77\1\u04bc\74\77\1\u04bd\116\77\1\226"+
+    "\22\77\1\u04be\73\77\1\226\26\77\1\u04bf\67\77\1\226"+
+    "\36\77\1\u04c0\57\77\1\226\40\77\1\u04c1\55\77\1\226"+
+    "\102\77\1\u04c2\13\77\1\u04c3\116\77\1\226\6\77\1\u04c4"+
+    "\107\77\1\226\36\77\1\u04c5\57\77\1\226\1\77\1\u04c6"+
+    "\114\77\1\226\2\77\1\u04c7\113\77\1\226\13\77\1\u04c8"+
+    "\102\77\1\226\21\77\1\u04c9\74\77\1\226\13\77\1\u04ca"+
+    "\102\77\1\226\101\77\1\u04cb\14\77\1\226\32\77\1\u04cc"+
+    "\63\77\1\226\2\77\1\u04cd\113\77\1\226\21\77\1\u04ce"+
+    "\74\77\1\226\26\77\1\u04cf\67\77\1\226\2\77\1\u04d0"+
+    "\113\77\1\226\31\77\1\u04d1\64\77\1\226\20\77\1\u04d2"+
+    "\75\77\1\226\26\77\1\u04d3\67\77\1\226\36\77\1\u04d4"+
+    "\57\77\1\226\36\77\1\u04d5\57\77\1\226\31\77\1\u04d6"+
+    "\64\77\1\226\4\77\1\u04d7\104\77\2\u0462\2\77\1\u0462"+
+    "\1\u049e\1\77\2\u0462\1\77\3\u0462\1\77\5\u0462\3\77"+
+    "\23\u0462\22\77\7\u0462\1\77\12\u0462\4\77\1\u04d8\2\77"+
+    "\1\226\116\77\1\u04d9\111\77\2\u04a2\3\77\1\u04d9\66\77"+
+    "\2\u04a2\26\77\1\u04da\111\77\2\u04a4\3\77\1\u04da\66\77"+
+    "\2\u04a4\21\77\1\u04db\1\u04dc\3\77\1\226\66\77\2\u04dc"+
+    "\21\77\2\u046a\1\u04a5\1\77\1\u046a\1\226\1\77\2\u046a"+
+    "\1\77\3\u046a\1\77\5\u046a\3\77\23\u046a\22\77\7\u046a"+
+    "\1\77\12\u046a\5\77\1\u04dd\1\u04de\1\226\1\77\2\u04de"+
+    "\1\77\3\u04de\1\77\5\u04de\3\77\23\u04de\22\77\1\u04de"+
+    "\2\77\4\u04de\1\77\12\u04de\2\77\2\u04a9\2\77\1\u04a9"+
+    "\1\226\1\77\2\u04a9\1\77\3\u04a9\1\77\5\u04a9\3\77"+
+    "\23\u04a9\22\77\7\u04a9\1\77\12\u04a9\2\77\2\u04a9\1\u04df"+
+    "\1\u04e0\1\u04a9\1\226\1\77\2\u04a9\1\77\3\u04a9\1\77"+
+    "\5\u04a9\3\77\23\u04a9\22\77\7\u04a9\1\77\12\u04a9\5\77"+
+    "\1\u04e1\1\u04e2\1\226\1\77\2\u04e2\1\77\3\u04e2\1\77"+
+    "\5\u04e2\3\77\23\u04e2\22\77\1\u04e2\2\77\4\u04e2\1\77"+
+    "\12\u04e2\4\77\1\u04e3\2\77\1\226\116\77\1\226\41\77"+
+    "\1\u04e4\54\77\1\226\36\77\1\u04e5\52\77\1\u04e6\1\u04e7"+
+    "\3\77\1\226\66\77\2\u04e7\21\77\2\u0472\1\u04ae\1\77"+
+    "\1\u0472\1\226\1\77\2\u0472\1\77\3\u0472\1\77\5\u0472"+
+    "\3\77\23\u0472\22\77\7\u0472\1\77\12\u0472\2\77\2\u04b1"+
+    "\2\77\1\u04b1\1\226\1\77\2\u04b1\1\77\3\u04b1\1\77"+
+    "\5\u04b1\3\77\23\u04b1\22\77\7\u04b1\1\77\12\u04b1\2\77"+
+    "\2\u04b1\1\u04e8\1\u04e9\1\u04b1\1\226\1\77\2\u04b1\1\77"+
+    "\3\u04b1\1\77\5\u04b1\3\77\23\u04b1\22\77\7\u04b1\1\77"+
+    "\12\u04b1\7\77\1\226\24\77\1\u04ea\71\77\1\226\36\77"+
+    "\1\u04eb\57\77\1\226\37\77\1\u04ec\56\77\1\u04ed\116\77"+
+    "\1\226\36\77\1\u04ee\57\77\1\u04ef\116\77\1\226\36\77"+
+    "\1\u04f0\57\77\1\226\32\77\1\u04f1\63\77\1\226\1\77"+
+    "\1\u04f2\114\77\1\226\24\77\1\u04f3\71\77\1\u04f4\116\77"+
+    "\1\226\20\77\1\u04f5\75\77\1\226\26\77\1\u04f6\67\77"+
+    "\1\226\36\77\1\u04f7\57\77\1\226\34\77\1\u04f8\61\77"+
+    "\1\u04f9\116\77\1\226\26\77\1\u04fa\67\77\1\226\30\77"+
+    "\1\u04fb\65\77\1\226\13\77\1\u04fc\102\77\1\226\2\77"+
+    "\1\u04fd\113\77\1\226\37\77\1\u04fe\56\77\1\226\2\77"+
+    "\1\u04ff\113\77\1\226\23\77\1\u0500\72\77\1\226\37\77"+
+    "\1\u0501\56\77\1\226\101\77\1\u0502\14\77\1\226\41\77"+
+    "\1\u0503\54\77\1\226\36\77\1\u0504\57\77\1\226\13\77"+
+    "\1\u0505\102\77\1\u0506\116\77\1\226\21\77\1\u0507\74\77"+
+    "\1\226\36\77\1\u0508\57\77\1\226\24\77\1\u0509\71\77"+
+    "\1\226\34\77\1\u050a\61\77\1\226\36\77\1\u050b\57\77"+
+    "\1\226\40\77\1\u050c\53\77\1\u050d\1\u050e\1\226\1\77"+
+    "\2\u050e\1\77\3\u050e\1\77\5\u050e\3\77\14\u050e\1\u050f"+
+    "\6\u050e\22\77\1\u050e\2\77\4\u050e\1\77\12\u050e\7\77"+
+    "\1\u0510\111\77\2\u04dc\3\77\1\u0510\66\77\2\u04dc\21\77"+
+    "\2\u04de\2\77\1\u04de\1\226\1\77\2\u04de\1\77\3\u04de"+
+    "\1\77\5\u04de\3\77\23\u04de\22\77\7\u04de\1\77\12\u04de"+
+    "\2\77\2\u04de\1\u0511\1\u0512\1\u04de\1\226\1\77\2\u04de"+
+    "\1\77\3\u04de\1\77\5\u04de\3\77\23\u04de\22\77\7\u04de"+
+    "\1\77\12\u04de\2\77\1\u0513\1\u0514\3\77\1\226\66\77"+
+    "\2\u0514\21\77\2\u04a9\1\u04df\1\77\1\u04a9\1\226\1\77"+
+    "\2\u04a9\1\77\3\u04a9\1\77\5\u04a9\3\77\23\u04a9\22\77"+
+    "\7\u04a9\1\77\12\u04a9\2\77\2\u04e2\2\77\1\u04e2\1\226"+
+    "\1\77\2\u04e2\1\77\3\u04e2\1\77\5\u04e2\3\77\23\u04e2"+
+    "\22\77\7\u04e2\1\77\12\u04e2\2\77\2\u04e2\1\u0515\1\u0516"+
+    "\1\u04e2\1\226\1\77\2\u04e2\1\77\3\u04e2\1\77\5\u04e2"+
+    "\3\77\23\u04e2\22\77\7\u04e2\1\77\12\u04e2\5\77\1\u0517"+
+    "\1\u0518\1\226\1\77\2\u0518\1\77\3\u0518\1\77\5\u0518"+
+    "\3\77\23\u0518\22\77\1\u0518\2\77\4\u0518\1\77\12\u0518"+
+    "\7\77\1\226\36\77\1\u0519\54\77\1\u051a\2\77\1\226"+
+    "\116\77\1\u051b\111\77\2\u04e7\3\77\1\u051b\66\77\2\u04e7"+
+    "\21\77\1\u051c\1\u051d\3\77\1\226\66\77\2\u051d\21\77"+
+    "\2\u04b1\1\u04e8\1\77\1\u04b1\1\226\1\77\2\u04b1\1\77"+
+    "\3\u04b1\1\77\5\u04b1\3\77\23\u04b1\22\77\7\u04b1\1\77"+
+    "\12\u04b1\7\77\1\u051e\116\77\1\u051f\116\77\1\u0520\116\77"+
+    "\1\226\70\77\1\u0521\25\77\1\226\20\77\1\u0522\75\77"+
+    "\1\226\24\77\1\u0523\71\77\1\226\21\77\1\u0524\74\77"+
+    "\1\226\1\77\1\u0525\114\77\1\226\22\77\1\u0526\73\77"+
+    "\1\226\20\77\1\u0527\75\77\1\226\20\77\1\u0528\75\77"+
+    "\1\226\2\77\1\u0529\113\77\1\226\30\77\1\u052a\65\77"+
+    "\1\226\31\77\1\u052b\64\77\1\226\2\77\1\u052c\113\77"+
+    "\1\226\30\77\1\u052d\65\77\1\226\36\77\1\u052e\57\77"+
+    "\1\226\30\77\1\u052f\65\77\1\226\33\77\1\u0530\62\77"+
+    "\1\226\13\77\1\u0531\102\77\1\226\21\77\1\u0532\74\77"+
+    "\1\226\36\77\1\u0533\57\77\1\226\2\77\1\u0534\113\77"+
+    "\1\226\2\77\1\u0535\113\77\1\226\2\77\1\u0536\113\77"+
+    "\1\226\2\77\1\u0537\113\77\1\226\1\77\1\u0538\114\77"+
+    "\1\226\36\77\1\u0539\57\77\1\226\101\77\1\u053a\14\77"+
+    "\1\226\2\77\1\u053b\106\77\2\u050e\2\77\1\u050e\1\226"+
+    "\1\77\2\u050e\1\77\3\u050e\1\77\5\u050e\3\77\23\u050e"+
+    "\22\77\7\u050e\1\77\12\u050e\2\77\2\u050e\1\77\1\u053c"+
+    "\1\u050e\1\u053d\1\77\2\u050e\1\77\3\u050e\1\77\5\u050e"+
+    "\3\77\23\u050e\22\77\7\u050e\1\77\12\u050e\2\77\2\u050e"+
+    "\1\77\1\u053c\1\u050e\1\u053d\1\77\2\u050e\1\77\3\u050e"+
+    "\1\77\5\u050e\3\77\15\u050e\1\u053e\5\u050e\22\77\7\u050e"+
+    "\1\77\12\u050e\2\77\1\u053f\1\u0540\3\77\1\226\66\77"+
+    "\2\u0540\21\77\2\u04de\1\u0511\1\77\1\u04de\1\226\1\77"+
+    "\2\u04de\1\77\3\u04de\1\77\5\u04de\3\77\23\u04de\22\77"+
+    "\7\u04de\1\77\12\u04de\7\77\1\u0541\111\77\2\u0514\3\77"+
+    "\1\u0541\66\77\2\u0514\21\77\1\u0542\1\u0543\3\77\1\226"+
+    "\66\77\2\u0543\21\77\2\u04e2\1\u0515\1\77\1\u04e2\1\226"+
+    "\1\77\2\u04e2\1\77\3\u04e2\1\77\5\u04e2\3\77\23\u04e2"+
+    "\22\77\7\u04e2\1\77\12\u04e2\2\77\2\u0518\2\77\1\u0518"+
+    "\1\226\1\77\2\u0518\1\77\3\u0518\1\77\5\u0518\3\77"+
+    "\23\u0518\22\77\7\u0518\1\77\12\u0518\2\77\2\u0518\1\u0544"+
+    "\1\u0545\1\u0518\1\226\1\77\2\u0518\1\77\3\u0518\1\77"+
+    "\5\u0518\3\77\23\u0518\22\77\7\u0518\1\77\12\u0518\4\77"+
+    "\1\u0546\2\77\1\226\114\77\1\u0547\1\u0548\1\226\1\77"+
+    "\2\u0548\1\77\3\u0548\1\77\5\u0548\3\77\23\u0548\22\77"+
+    "\1\u0548\2\77\4\u0548\1\77\12\u0548\7\77\1\u0549\111\77"+
+    "\2\u051d\3\77\1\u0549\66\77\2\u051d\26\77\1\226\40\77"+
+    "\1\u054a\55\77\1\226\2\77\1\u054b\113\77\1\u054c\116\77"+
+    "\1\226\24\77\1\u054d\71\77\1\226\21\77\1\u054e\74\77"+
+    "\1\u054f\116\77\1\226\22\77\1\u0550\73\77\1\226\2\77"+
+    "\1\u0551\113\77\1\226\21\77\1\u0552\74\77\1\226\34\77"+
+    "\1\u0553\61\77\1\226\1\77\1\u0554\114\77\1\226\30\77"+
+    "\1\u0555\65\77\1\226\2\77\1\u0556\113\77\1\226\31\77"+
+    "\1\u0557\64\77\1\226\2\77\1\u0558\113\77\1\226\36\77"+
+    "\1\u0559\57\77\1\226\2\77\1\u055a\113\77\1\226\37\77"+
+    "\1\u055b\56\77\1\226\13\77\1\u055c\102\77\1\226\35\77"+
+    "\1\u055d\60\77\1\226\30\77\1\u055e\65\77\1\226\21\77"+
+    "\1\u055f\74\77\1\226\35\77\1\u0560\60\77\1\226\13\77"+
+    "\1\u0561\102\77\1\226\21\77\1\u0562\74\77\1\226\21\77"+
+    "\1\u0563\74\77\1\226\21\77\1\u0564\67\77\2\u050e\2\77"+
+    "\1\u050e\1\u053d\1\77\2\u050e\1\77\3\u050e\1\77\5\u050e"+
+    "\3\77\23\u050e\22\77\7\u050e\1\77\12\u050e\2\77\2\u050e"+
+    "\1\77\1\u053c\1\u050e\1\u053d\1\77\2\u050e\1\77\3\u050e"+
+    "\1\77\5\u050e\3\77\12\u050e\1\u0565\10\u050e\22\77\7\u050e"+
+    "\1\77\12\u050e\7\77\1\u0566\111\77\2\u0540\3\77\1\u0566"+
+    "\66\77\2\u0540\26\77\1\u0567\111\77\2\u0543\3\77\1\u0567"+
+    "\66\77\2\u0543\21\77\1\u0568\1\u0569\3\77\1\226\66\77"+
+    "\2\u0569\21\77\2\u0518\1\u0544\1\77\1\u0518\1\226\1\77"+
+    "\2\u0518\1\77\3\u0518\1\77\5\u0518\3\77\23\u0518\22\77"+
+    "\7\u0518\1\77\12\u0518\5\77\1\u056a\1\u056b\1\226\1\77"+
+    "\2\u056b\1\77\3\u056b\1\77\5\u056b\3\77\23\u056b\22\77"+
+    "\1\u056b\2\77\4\u056b\1\77\12\u056b\2\77\2\u0548\2\77"+
+    "\1\u0548\1\226\1\77\2\u0548\1\77\3\u0548\1\77\5\u0548"+
+    "\3\77\23\u0548\22\77\7\u0548\1\77\12\u0548\2\77\2\u0548"+
+    "\1\u056c\1\u056d\1\u0548\1\226\1\77\2\u0548\1\77\3\u0548"+
+    "\1\77\5\u0548\3\77\23\u0548\22\77\7\u0548\1\77\12\u0548"+
+    "\7\77\1\226\36\77\1\u056e\57\77\1\u056f\116\77\1\226"+
+    "\22\77\1\u0570\73\77\1\226\24\77\1\u0571\71\77\1\u0572"+
+    "\116\77\1\u0573\116\77\1\226\32\77\1\u0574\63\77\1\226"+
+    "\35\77\1\u0575\60\77\1\226\13\77\1\u0576\102\77\1\226"+
+    "\2\77\1\u0577\113\77\1\226\36\77\1\u0578\57\77\1\226"+
+    "\13\77\1\u0579\61\77\1\u057a\20\77\1\226\36\77\1\u057b"+
+    "\57\77\1\u057c\116\77\1\226\30\77\1\u057d\65\77\1\226"+
+    "\36\77\1\u057e\57\77\1\226\2\77\1\u057f\113\77\1\226"+
+    "\32\77\1\u0580\63\77\1\226\2\77\1\u0581\113\77\1\226"+
+    "\32\77\1\u0582\63\77\1\226\32\77\1\u0583\63\77\1\226"+
+    "\2\77\1\u0584\113\77\1\226\41\77\1\u0585\54\77\1\226"+
+    "\37\77\1\u0586\56\77\1\226\32\77\1\u0587\56\77\2\u050e"+
+    "\1\77\1\u053c\1\u050e\1\u053d\1\77\2\u050e\1\77\3\u050e"+
+    "\1\77\5\u050e\3\77\1\u050e\1\u0588\21\u050e\22\77\7\u050e"+
+    "\1\77\12\u050e\7\77\1\u0589\111\77\2\u0569\3\77\1\u0589"+
+    "\66\77\2\u0569\21\77\2\u056b\2\77\1\u056b\1\226\1\77"+
+    "\2\u056b\1\77\3\u056b\1\77\5\u056b\3\77\23\u056b\22\77"+
+    "\7\u056b\1\77\12\u056b\2\77\2\u056b\1\u058a\1\u058b\1\u056b"+
+    "\1\226\1\77\2\u056b\1\77\3\u056b\1\77\5\u056b\3\77"+
+    "\23\u056b\22\77\7\u056b\1\77\12\u056b\2\77\1\u058c\1\u058d"+
+    "\3\77\1\226\66\77\2\u058d\21\77\2\u0548\1\u056c\1\77"+
+    "\1\u0548\1\226\1\77\2\u0548\1\77\3\u0548\1\77\5\u0548"+
+    "\3\77\23\u0548\22\77\7\u0548\1\77\12\u0548\7\77\1\226"+
+    "\20\77\1\u058e\75\77\1\u058f\116\77\1\226\22\77\1\u0590"+
+    "\73\77\1\226\24\77\1\u0591\71\77\1\226\21\77\1\u0592"+
+    "\74\77\1\226\2\77\1\u0593\113\77\1\226\36\77\1\u0594"+
+    "\57\77\1\u0595\116\77\1\226\2\77\1\u0596\113\77\1\226"+
+    "\36\77\1\u0597\57\77\1\u0598\116\77\1\226\2\77\1\u0599"+
+    "\113\77\1\226\31\77\1\u059a\64\77\1\226\30\77\1\u059b"+
+    "\65\77\1\226\1\77\1\u059c\114\77\1\226\36\77\1\u059d"+
+    "\57\77\1\226\24\77\1\u059e\71\77\1\226\1\77\1\u059f"+
+    "\114\77\1\226\30\77\1\u05a0\65\77\1\226\36\77\1\u05a1"+
+    "\57\77\1\226\36\77\1\u05a2\57\77\1\226\24\77\1\u05a3"+
+    "\64\77\2\u050e\1\77\1\u053c\1\u050e\1\u053d\1\77\2\u050e"+
+    "\1\77\3\u050e\1\77\5\u050e\3\77\14\u050e\1\u05a4\6\u050e"+
+    "\22\77\7\u050e\1\77\12\u050e\2\77\1\u05a5\1\u05a6\3\77"+
+    "\1\226\66\77\2\u05a6\21\77\2\u056b\1\u058a\1\77\1\u056b"+
+    "\1\226\1\77\2\u056b\1\77\3\u056b\1\77\5\u056b\3\77"+
+    "\23\u056b\22\77\7\u056b\1\77\12\u056b\7\77\1\u05a7\111\77"+
+    "\2\u058d\3\77\1\u05a7\66\77\2\u058d\26\77\1\226\2\77"+
+    "\1\u05a8\113\77\1\u05a9\116\77\1\u05aa\116\77\1\226\24\77"+
+    "\1\u05ab\71\77\1\226\30\77\1\u05ac\65\77\1\u05ad\116\77"+
+    "\1\226\30\77\1\u05ae\65\77\1\226\70\77\1\u05af\25\77"+
+    "\1\226\36\77\1\u05b0\57\77\1\226\13\77\1\u05b1\61\77"+
+    "\1\u05b2\20\77\1\226\2\77\1\u05b3\113\77\1\u05b4\116\77"+
+    "\1\u05b5\116\77\1\u05b6\116\77\1\u05b7\116\77\1\226\2\77"+
+    "\1\u05b8\113\77\1\226\13\77\1\u05b9\102\77\1\226\31\77"+
+    "\1\u05ba\64\77\1\226\72\77\1\u05bb\16\77\2\u050e\1\77"+
+    "\1\u053c\1\u050e\1\u053d\1\77\2\u050e\1\77\3\u050e\1\77"+
+    "\5\u050e\3\77\16\u050e\1\u05bc\4\u050e\22\77\7\u050e\1\77"+
+    "\12\u050e\7\77\1\u05bd\111\77\2\u05a6\3\77\1\u05bd\66\77"+
+    "\2\u05a6\26\77\1\u05be\116\77\1\226\36\77\1\u05bf\57\77"+
+    "\1\226\2\77\1\u05c0\113\77\1\226\2\77\1\u05c1\113\77"+
+    "\1\226\40\77\1\u05c2\55\77\1\u05c3\116\77\1\226\2\77"+
+    "\1\u05c4\113\77\1\226\36\77\1\u05c5\57\77\1\226\36\77"+
+    "\1\u05c6\57\77\1\226\36\77\1\u05c7\57\77\1\226\2\77"+
+    "\1\u05c8\113\77\1\226\13\77\1\u05c9\61\77\1\u05ca\20\77"+
+    "\1\226\30\77\1\u05cb\60\77\2\u050e\1\77\1\u05cc\1\u050e"+
+    "\1\u053d\1\77\2\u050e\1\77\3\u050e\1\77\5\u050e\3\77"+
+    "\23\u050e\22\77\7\u050e\1\77\12\u050e\7\77\1\u05cd\116\77"+
+    "\1\226\36\77\1\u05ce\57\77\1\226\36\77\1\u05cf\57\77"+
+    "\1\226\36\77\1\u05d0\57\77\1\226\30\77\1\u05d1\65\77"+
+    "\1\226\70\77\1\u05d2\25\77\1\u05d3\116\77\1\u05d4\116\77"+
+    "\1\226\30\77\1\u05d5\65\77\1\226\2\77\1\u05d6\113\77"+
+    "\1\226\36\77\1\u05d7\57\77\1\226\73\77\1\u05d8\15\77"+
+    "\2\u050e\1\77\1\u05d9\1\u050e\1\u053d\1\77\2\u050e\1\77"+
+    "\3\u050e\1\77\5\u050e\3\77\23\u050e\22\77\7\u050e\1\77"+
+    "\12\u050e\7\77\1\u05da\116\77\1\u05db\116\77\1\226\20\77"+
+    "\1\u05dc\75\77\1\226\2\77\1\u05dd\113\77\1\226\40\77"+
+    "\1\u05de\55\77\1\226\2\77\1\u05df\113\77\1\226\30\77"+
+    "\1\u05e0\65\77\1\226\70\77\1\u05e1\25\77\1\u05e2\111\77"+
+    "\2\u05d9\3\77\1\u053d\66\77\2\u05d9\26\77\1\226\2\77"+
+    "\1\u05e3\113\77\1\226\36\77\1\u05e4\57\77\1\226\36\77"+
+    "\1\u05e5\57\77\1\226\36\77\1\u05e6\57\77\1\226\2\77"+
+    "\1\u05e7\113\77\1\226\40\77\1\u05e8\55\77\1\u05e9\116\77"+
+    "\1\u05ea\116\77\1\226\20\77\1\u05eb\75\77\1\u05ec\116\77"+
+    "\1\226\36\77\1\u05ed\57\77\1\226\36\77\1\u05ee\57\77"+
+    "\1\226\2\77\1\u05ef\113\77\1\u05f0\116\77\1\226\20\77"+
+    "\1\u05f1\75\77\1\u05f2\116\77\1\226\2\77\1\u05f3\113\77"+
+    "\1\u05f4\107\77";
+
+  private static int [] zzUnpackTrans() {
+    int [] result = new int[101515];
+    int offset = 0;
+    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackTrans(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      value--;
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+
+  /* error codes */
+  private static final int ZZ_UNKNOWN_ERROR = 0;
+  private static final int ZZ_NO_MATCH = 1;
+  private static final int ZZ_PUSHBACK_2BIG = 2;
+
+  /* error messages for the codes above */
+  private static final String ZZ_ERROR_MSG[] = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+  /**
+   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+   */
+  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+  private static final String ZZ_ATTRIBUTE_PACKED_0 =
+    "\3\0\2\11\2\1\1\11\12\1\1\11\21\1\1\11"+
+    "\1\1\5\11\2\1\6\11\6\1\1\11\1\1\2\0"+
+    "\1\1\10\0\6\1\2\11\7\1\2\11\62\1\3\11"+
+    "\1\0\1\11\5\1\2\0\1\11\1\0\1\11\43\0"+
+    "\141\1\36\0\1\11\21\0\144\1\63\0\120\1\23\0"+
+    "\1\11\13\0\1\11\3\0\1\11\25\0\101\1\1\0"+
+    "\1\1\1\0\1\11\36\0\1\11\5\0\1\11\2\0"+
+    "\1\11\2\0\1\11\17\0\64\1\1\11\3\0\1\11"+
+    "\1\0\1\11\23\0\2\11\4\0\1\11\6\0\1\11"+
+    "\3\0\1\11\23\0\37\1\1\0\3\11\25\0\1\11"+
+    "\5\0\1\11\1\0\1\11\3\0\1\11\32\0\27\1"+
+    "\4\0\1\11\2\0\1\11\16\0\1\11\1\0\4\11"+
+    "\17\0\1\11\23\0\15\1\4\0\1\11\20\0\2\11"+
+    "\3\0\1\11\3\0\1\11\34\0\4\1\27\0\1\11"+
+    "\7\0\1\11\33\0\1\1\2\0\1\11\1\0\1\11"+
+    "\24\0\1\11\7\0\1\11\5\0\1\11\25\0\2\11"+
+    "\22\0\1\11\1\0\1\11\4\0\1\11\4\0\1\11"+
+    "\14\0\1\11\11\0\1\11\12\0\1\11\2\0\3\11"+
+    "\34\0\1\11\3\0\1\11\7\0\1\11\2\0\1\11"+
+    "\2\0\1\11\26\0\2\11\7\0\1\11\2\0\2\11"+
+    "\10\0\1\11\14\0\1\11\5\0\1\11\5\0\1\11"+
+    "\2\0\1\11\16\0\1\11\1\0\2\11\2\0\1\11"+
+    "\6\0\4\11\5\0\2\11\4\0\1\11\11\0\1\11"+
+    "\5\0\2\11\5\0\2\11\6\0\1\11\6\0\2\11"+
+    "\1\0\1\11\3\0\1\11\1\0\1\11\1\0\1\11";
+
+  private static int [] zzUnpackAttribute() {
+    int [] result = new int[1524];
+    int offset = 0;
+    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+    return result;
+  }
+
+  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
+    int i = 0;       /* index in packed string  */
+    int j = offset;  /* index in unpacked array */
+    int l = packed.length();
+    while (i < l) {
+      int count = packed.charAt(i++);
+      int value = packed.charAt(i++);
+      do result[j++] = value; while (--count > 0);
+    }
+    return j;
+  }
+
+  /** the input device */
+  private java.io.Reader zzReader;
+
+  /** the current state of the DFA */
+  private int zzState;
+
+  /** the current lexical state */
+  private int zzLexicalState = YYINITIAL;
+
+  /** this buffer contains the current text to be matched and is
+      the source of the yytext() string */
+  private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+  /** the textposition at the last accepting state */
+  private int zzMarkedPos;
+
+  /** the current text position in the buffer */
+  private int zzCurrentPos;
+
+  /** startRead marks the beginning of the yytext() string in the buffer */
+  private int zzStartRead;
+
+  /** endRead marks the last character in the buffer, that has been read
+      from input */
+  private int zzEndRead;
+
+  /** number of newlines encountered up to the start of the matched text */
+  private int yyline;
+
+  /** the number of characters up to the start of the matched text */
+  private int yychar;
+
+  /**
+   * the number of characters from the last newline up to the start of the 
+   * matched text
+   */
+  private int yycolumn;
+
+  /** 
+   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+   */
+  private boolean zzAtBOL = true;
+
+  /** zzAtEOF == true <=> the scanner is at the EOF */
+  private boolean zzAtEOF;
+
+  /** denotes if the user-EOF-code has already been executed */
+  private boolean zzEOFDone;
+
+  /* user code: */
+    ComplexSymbol makeSymbol(int id, Object val) {
+        // System.out.print(" ##" + AvatarFromSysMLSymbols.terminalNames[id] + "-" + val + " " + "(" + "l:" + yyline + ",c:" + yycolumn + ")");
+        return new ComplexSymbol(
+            AvatarFromSysMLSymbols.terminalNames[id],
+            id,
+            new Location(yyline, yycolumn),
+            new Location(yyline, yycolumn + yytext().length()),
+            val);
+    }
+    /** create a symbol provided with current lexeme and location */
+    ComplexSymbol makeSymbol(int id) {
+        // System.out.print(" ##" + AvatarFromSysMLSymbols.terminalNames[id] + "(" + "l:" + yyline + ",c:" + yycolumn + ")");
+        return new ComplexSymbol(
+            AvatarFromSysMLSymbols.terminalNames[id],
+            id,
+            new Location(yyline, yycolumn),
+            new Location(yyline, yycolumn + yytext().length()));
+    }
+
+    /** to memorize error location before throwing an exception */
+    Location errorLocation;
+
+    /** memorize error location */
+    public void setErrorLocation(Location _errorLocation) { errorLocation = _errorLocation; }
+
+    /** get memorized error location */
+    public Location getErrorLocation() { return errorLocation; }
+
+    /** get current location. To allow parser to know location without lexeme (i.e. through empty grammar rule) */
+    public Location getLocation() { return new Location(yyline, yycolumn); }
+
+
+  /**
+   * Creates a new scanner
+   * There is also a java.io.InputStream version of this constructor.
+   *
+   * @param   in  the java.io.Reader to read input from.
+   */
+  public AvatarFromSysMLLexer(java.io.Reader in) {
+    // there is initially no error
+    errorLocation = null;
+    this.zzReader = in;
+  }
+
+  /**
+   * Creates a new scanner.
+   * There is also java.io.Reader version of this constructor.
+   *
+   * @param   in  the java.io.Inputstream to read input from.
+   */
+  public AvatarFromSysMLLexer(java.io.InputStream in) {
+    this(new java.io.InputStreamReader(in));
+  }
+
+  /** 
+   * Unpacks the compressed character translation table.
+   *
+   * @param packed   the packed character translation table
+   * @return         the unpacked character translation table
+   */
+  private static char [] zzUnpackCMap(String packed) {
+    char [] map = new char[0x10000];
+    int i = 0;  /* index in packed string  */
+    int j = 0;  /* index in unpacked array */
+    while (i < 182) {
+      int  count = packed.charAt(i++);
+      char value = packed.charAt(i++);
+      do map[j++] = value; while (--count > 0);
+    }
+    return map;
+  }
+
+
+  /**
+   * Refills the input buffer.
+   *
+   * @return      <code>false</code>, iff there was new input.
+   * 
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  private boolean zzRefill() throws java.io.IOException {
+
+    /* first: make room (if you can) */
+    if (zzStartRead > 0) {
+      System.arraycopy(zzBuffer, zzStartRead,
+                       zzBuffer, 0,
+                       zzEndRead-zzStartRead);
+
+      /* translate stored positions */
+      zzEndRead-= zzStartRead;
+      zzCurrentPos-= zzStartRead;
+      zzMarkedPos-= zzStartRead;
+      zzStartRead = 0;
+    }
+
+    /* is the buffer big enough? */
+    if (zzCurrentPos >= zzBuffer.length) {
+      /* if not: blow it up */
+      char newBuffer[] = new char[zzCurrentPos*2];
+      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+      zzBuffer = newBuffer;
+    }
+
+    /* finally: fill the buffer with new input */
+    int numRead = zzReader.read(zzBuffer, zzEndRead,
+                                            zzBuffer.length-zzEndRead);
+
+    if (numRead > 0) {
+      zzEndRead+= numRead;
+      return false;
+    }
+    // unlikely but not impossible: read 0 characters, but not at end of stream    
+    if (numRead == 0) {
+      int c = zzReader.read();
+      if (c == -1) {
+        return true;
+      } else {
+        zzBuffer[zzEndRead++] = (char) c;
+        return false;
+      }     
+    }
+
+	// numRead < 0
+    return true;
+  }
+
+    
+  /**
+   * Closes the input stream.
+   */
+  public final void yyclose() throws java.io.IOException {
+    zzAtEOF = true;            /* indicate end of file */
+    zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+    if (zzReader != null)
+      zzReader.close();
+  }
+
+
+  /**
+   * Resets the scanner to read from a new input stream.
+   * Does not close the old reader.
+   *
+   * All internal variables are reset, the old input stream 
+   * <b>cannot</b> be reused (internal buffer is discarded and lost).
+   * Lexical state is set to <code>ZZ_INITIAL</code>.
+   *
+   * @param reader   the new input stream 
+   */
+  public final void yyreset(java.io.Reader reader) {
+    zzReader = reader;
+    zzAtBOL  = true;
+    zzAtEOF  = false;
+    zzEOFDone = false;
+    zzEndRead = zzStartRead = 0;
+    zzCurrentPos = zzMarkedPos = 0;
+    yyline = yychar = yycolumn = 0;
+    zzLexicalState = YYINITIAL;
+  }
+
+
+  /**
+   * Returns the current lexical state.
+   */
+  public final int yystate() {
+    return zzLexicalState;
+  }
+
+
+  /**
+   * Enters a new lexical state
+   *
+   * @param newState the new lexical state
+   */
+  public final void yybegin(int newState) {
+    zzLexicalState = newState;
+  }
+
+
+  /**
+   * Returns the text matched by the current regular expression.
+   */
+  public final String yytext() {
+    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+  }
+
+
+  /**
+   * Returns the character at position <code>pos</code> from the 
+   * matched text. 
+   * 
+   * It is equivalent to yytext().charAt(pos), but faster
+   *
+   * @param pos the position of the character to fetch. 
+   *            A value from 0 to yylength()-1.
+   *
+   * @return the character at position pos
+   */
+  public final char yycharat(int pos) {
+    return zzBuffer[zzStartRead+pos];
+  }
+
+
+  /**
+   * Returns the length of the matched text region.
+   */
+  public final int yylength() {
+    return zzMarkedPos-zzStartRead;
+  }
+
+
+  /**
+   * Reports an error that occured while scanning.
+   *
+   * In a wellformed scanner (no or only correct usage of 
+   * yypushback(int) and a match-all fallback rule) this method 
+   * will only be called with things that "Can't Possibly Happen".
+   * If this method is called, something is seriously wrong
+   * (e.g. a JFlex bug producing a faulty scanner etc.).
+   *
+   * Usual syntax/scanner level error handling should be done
+   * in error fallback rules.
+   *
+   * @param   errorCode  the code of the errormessage to display
+   */
+  private void zzScanError(int errorCode) {
+    String message;
+    try {
+      message = ZZ_ERROR_MSG[errorCode];
+    }
+    catch (ArrayIndexOutOfBoundsException e) {
+      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+    }
+
+    throw new Error(message);
+  } 
+
+
+  /**
+   * Pushes the specified amount of characters back into the input stream.
+   *
+   * They will be read again by then next call of the scanning method
+   *
+   * @param number  the number of characters to be read again.
+   *                This number must not be greater than yylength()!
+   */
+  public void yypushback(int number)  {
+    if ( number > yylength() )
+      zzScanError(ZZ_PUSHBACK_2BIG);
+
+    zzMarkedPos -= number;
+  }
+
+
+  /**
+   * Contains user EOF-code, which will be executed exactly once,
+   * when the end of file is reached
+   */
+  private void zzDoEOF() throws java.io.IOException {
+    if (!zzEOFDone) {
+      zzEOFDone = true;
+      yyclose();
+    }
+  }
+
+
+  /**
+   * Resumes scanning until the next regular expression is matched,
+   * the end of input is encountered or an I/O-Error occurs.
+   *
+   * @return      the next token
+   * @exception   java.io.IOException  if any I/O-Error occurs
+   */
+  public java_cup.runtime.Symbol next_token() throws java.io.IOException, Exception {
+    int zzInput;
+    int zzAction;
+
+    // cached fields:
+    int zzCurrentPosL;
+    int zzMarkedPosL;
+    int zzEndReadL = zzEndRead;
+    char [] zzBufferL = zzBuffer;
+    char [] zzCMapL = ZZ_CMAP;
+
+    int [] zzTransL = ZZ_TRANS;
+    int [] zzRowMapL = ZZ_ROWMAP;
+    int [] zzAttrL = ZZ_ATTRIBUTE;
+
+    while (true) {
+      zzMarkedPosL = zzMarkedPos;
+
+      boolean zzR = false;
+      for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;
+                                                             zzCurrentPosL++) {
+        switch (zzBufferL[zzCurrentPosL]) {
+        case '\u000B':
+        case '\u000C':
+        case '\u0085':
+        case '\u2028':
+        case '\u2029':
+          yyline++;
+          yycolumn = 0;
+          zzR = false;
+          break;
+        case '\r':
+          yyline++;
+          yycolumn = 0;
+          zzR = true;
+          break;
+        case '\n':
+          if (zzR)
+            zzR = false;
+          else {
+            yyline++;
+            yycolumn = 0;
+          }
+          break;
+        default:
+          zzR = false;
+          yycolumn++;
+        }
+      }
+
+      if (zzR) {
+        // peek one character ahead if it is \n (if we have counted one line too much)
+        boolean zzPeek;
+        if (zzMarkedPosL < zzEndReadL)
+          zzPeek = zzBufferL[zzMarkedPosL] == '\n';
+        else if (zzAtEOF)
+          zzPeek = false;
+        else {
+          boolean eof = zzRefill();
+          zzEndReadL = zzEndRead;
+          zzMarkedPosL = zzMarkedPos;
+          zzBufferL = zzBuffer;
+          if (eof) 
+            zzPeek = false;
+          else 
+            zzPeek = zzBufferL[zzMarkedPosL] == '\n';
+        }
+        if (zzPeek) yyline--;
+      }
+      zzAction = -1;
+
+      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+  
+      zzState = ZZ_LEXSTATE[zzLexicalState];
+
+
+      zzForAction: {
+        while (true) {
+    
+          if (zzCurrentPosL < zzEndReadL)
+            zzInput = zzBufferL[zzCurrentPosL++];
+          else if (zzAtEOF) {
+            zzInput = YYEOF;
+            break zzForAction;
+          }
+          else {
+            // store back cached positions
+            zzCurrentPos  = zzCurrentPosL;
+            zzMarkedPos   = zzMarkedPosL;
+            boolean eof = zzRefill();
+            // get translated positions and possibly new buffer
+            zzCurrentPosL  = zzCurrentPos;
+            zzMarkedPosL   = zzMarkedPos;
+            zzBufferL      = zzBuffer;
+            zzEndReadL     = zzEndRead;
+            if (eof) {
+              zzInput = YYEOF;
+              break zzForAction;
+            }
+            else {
+              zzInput = zzBufferL[zzCurrentPosL++];
+            }
+          }
+          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+          if (zzNext == -1) break zzForAction;
+          zzState = zzNext;
+
+          int zzAttributes = zzAttrL[zzState];
+          if ( (zzAttributes & 1) == 1 ) {
+            zzAction = zzState;
+            zzMarkedPosL = zzCurrentPosL;
+            if ( (zzAttributes & 8) == 8 ) break zzForAction;
+          }
+
+        }
+      }
+
+      // store back cached position
+      zzMarkedPos = zzMarkedPosL;
+
+      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+        case 114: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.DATATYPENAME,yytext()));
+          }
+        case 256: break;
+        case 10: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SEMICOLON);
+          }
+        case 257: break;
+        case 102: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FILTER);
+          }
+        case 258: break;
+        case 37: 
+          { yybegin(COMMENTLINE); break;
+          }
+        case 259: break;
+        case 1: 
+          { setErrorLocation(new Location(yyline, yycolumn));
+     throw new Exception ("unexpected character in  expression");
+          }
+        case 260: break;
+        case 142: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.TIMERBLOCKNAME,yytext()));
+          }
+        case 261: break;
+        case 174: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.RELATIONNAME,yytext()));
+          }
+        case 262: break;
+        case 104: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ASSERT);
+          }
+        case 263: break;
+        case 72: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ELSE);
+          }
+        case 264: break;
+        case 68: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PART);
+          }
+        case 265: break;
+        case 247: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVSTANDARDSTATE_T);
+          }
+        case 266: break;
+        case 193: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SYNCREL_T);
+          }
+        case 267: break;
+        case 46: 
+          { return makeSymbol(AvatarFromSysMLSymbols.NOT);
+          }
+        case 268: break;
+        case 94: 
+          { return makeSymbol(AvatarFromSysMLSymbols.UNTIL);
+          }
+        case 269: break;
+        case 51: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OUT);
+          }
+        case 270: break;
+        case 243: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVRANDOMSTATE_T);
+          }
+        case 271: break;
+        case 155: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PARALLEL);
+          }
+        case 272: break;
+        case 105: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ASSUME);
+          }
+        case 273: break;
+        case 252: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVPRERECEIVESTATE_T);
+          }
+        case 274: break;
+        case 26: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TO);
+          }
+        case 275: break;
+        case 69: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PORT);
+          }
+        case 276: break;
+        case 176: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.MESSAGENAME,yytext()));
+          }
+        case 277: break;
+        case 29: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BY);
+          }
+        case 278: break;
+        case 12: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PLUS);
+          }
+        case 279: break;
+        case 178: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PAYLOAD_F);
+          }
+        case 280: break;
+        case 177: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REQUEST_F);
+          }
+        case 281: break;
+        case 57: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DONE_U);
+          }
+        case 282: break;
+        case 19: 
+          { return makeSymbol(AvatarFromSysMLSymbols.LPAR);
+          }
+        case 283: break;
+        case 76: 
+          { return makeSymbol(AvatarFromSysMLSymbols.WHEN);
+          }
+        case 284: break;
+        case 159: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BLOCK2_F);
+          }
+        case 285: break;
+        case 70: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CALC);
+          }
+        case 286: break;
+        case 23: 
+          { return makeSymbol(AvatarFromSysMLSymbols.COMMA);
+          }
+        case 287: break;
+        case 17: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EQUAL);
+          }
+        case 288: break;
+        case 206: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.SENDSTATENAME,yytext()));
+          }
+        case 289: break;
+        case 48: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ALL);
+          }
+        case 290: break;
+        case 197: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REQUIREMENT);
+          }
+        case 291: break;
+        case 161: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EXPIRE_TM);
+          }
+        case 292: break;
+        case 229: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.PRERESETTIMERSTATENAME,yytext()));
+          }
+        case 293: break;
+        case 186: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ALLOCATION);
+          }
+        case 294: break;
+        case 112: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VERIFY);
+          }
+        case 295: break;
+        case 153: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ANALYSIS);
+          }
+        case 296: break;
+        case 42: 
+          { String s = yytext();
+                                return makeSymbol(AvatarFromSysMLSymbols.ANYNAME, s.substring(1, s.length() - 1));
+          }
+        case 297: break;
+        case 54: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VIA);
+          }
+        case 298: break;
+        case 203: 
+          { return makeSymbol(AvatarFromSysMLSymbols.NBFIFOREL_T);
+          }
+        case 299: break;
+        case 184: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SUCCESSION);
+          }
+        case 300: break;
+        case 67: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FORK);
+          }
+        case 301: break;
+        case 166: 
+          { return makeSymbol(AvatarFromSysMLSymbols.NONUNIQUE);
+          }
+        case 302: break;
+        case 162: 
+          { return makeSymbol(AvatarFromSysMLSymbols.WEIGHT_A);
+          }
+        case 303: break;
+        case 150: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SNAPSHOT);
+          }
+        case 304: break;
+        case 85: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FRAME);
+          }
+        case 305: break;
+        case 181: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CHANNEL_T);
+          }
+        case 306: break;
+        case 32: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IN);
+          }
+        case 307: break;
+        case 133: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CONNECT);
+          }
+        case 308: break;
+        case 6: 
+          { return makeSymbol(AvatarFromSysMLSymbols.COLON);
+          }
+        case 309: break;
+        case 18: 
+          { return makeSymbol(AvatarFromSysMLSymbols.QUEST);
+          }
+        case 310: break;
+        case 233: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.PREEXPIRETIMERSTATENAME,yytext()));
+          }
+        case 311: break;
+        case 146: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RESET_TM);
+          }
+        case 312: break;
+        case 101: 
+          { yybegin(IMPORTITEM); return makeSymbol(AvatarFromSysMLSymbols.IMPORT);
+          }
+        case 313: break;
+        case 147: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VALUE_F);
+          }
+        case 314: break;
+        case 138: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MESSAGE);
+          }
+        case 315: break;
+        case 140: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INTEGER_T);
+          }
+        case 316: break;
+        case 55: 
+          { return makeSymbol(AvatarFromSysMLSymbols.XOR);
+          }
+        case 317: break;
+        case 132: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PERFORM);
+          }
+        case 318: break;
+        case 234: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OUTSIGNALBINDING_T);
+          }
+        case 319: break;
+        case 65: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FLOW);
+          }
+        case 320: break;
+        case 108: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RETURN);
+          }
+        case 321: break;
+        case 82: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INOUT);
+          }
+        case 322: break;
+        case 24: 
+          { yybegin(YYINITIAL); break;
+          }
+        case 323: break;
+        case 254: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RESETTIMERREQUEST_T);
+          }
+        case 324: break;
+        case 248: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVSETTIMERSTATE_T);
+          }
+        case 325: break;
+        case 244: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVSTATEMACHINE_T);
+          }
+        case 326: break;
+        case 43: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.QUOTEDNAME,yytext()));
+          }
+        case 327: break;
+        case 225: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RECEIVEREQUEST_T);
+          }
+        case 328: break;
+        case 33: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IF);
+          }
+        case 329: break;
+        case 235: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TRANSITIONACTION_T);
+          }
+        case 330: break;
+        case 100: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ISTYPE);
+          }
+        case 331: break;
+        case 245: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVRECEIVESTATE_T);
+          }
+        case 332: break;
+        case 189: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CONSTRAINT);
+          }
+        case 333: break;
+        case 86: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ABOUT);
+          }
+        case 334: break;
+        case 47: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FOR);
+          }
+        case 335: break;
+        case 13: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MULT);
+          }
+        case 336: break;
+        case 135: 
+          { return makeSymbol(AvatarFromSysMLSymbols.COMMENT);
+          }
+        case 337: break;
+        case 59: 
+          { return makeSymbol(AvatarFromSysMLSymbols.THEN);
+          }
+        case 338: break;
+        case 242: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IMMEDIATEREQUEST_U);
+          }
+        case 339: break;
+        case 180: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CHANNEL_F);
+          }
+        case 340: break;
+        case 226: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TIMEREXPIREMSG_T);
+          }
+        case 341: break;
+        case 56: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.ATTRIBUTENAME,yytext()));
+          }
+        case 342: break;
+        case 139: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VARIANT);
+          }
+        case 343: break;
+        case 97: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MSG_U);
+          }
+        case 344: break;
+        case 130: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PACKAGE);
+          }
+        case 345: break;
+        case 232: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVSENDSTATE_T);
+          }
+        case 346: break;
+        case 121: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BINDING);
+          }
+        case 347: break;
+        case 221: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RECEIVEACTION_T);
+          }
+        case 348: break;
+        case 30: 
+          { return makeSymbol(AvatarFromSysMLSymbols.GEQ);
+          }
+        case 349: break;
+        case 40: 
+          { String s = yytext();
+                      return makeSymbol(AvatarFromSysMLSymbols.STRING, s.substring(1, s.length() - 1));
+          }
+        case 350: break;
+        case 27: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REFINES);
+          }
+        case 351: break;
+        case 207: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.RANDOMSTATENAME,yytext()));
+          }
+        case 352: break;
+        case 183: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TRANSITION);
+          }
+        case 353: break;
+        case 158: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BLOCK1_F);
+          }
+        case 354: break;
+        case 144: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.SIGNALNAME,yytext()));
+          }
+        case 355: break;
+        case 253: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVEXPIRETIMERSTATE_T);
+          }
+        case 356: break;
+        case 122: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BOOLEAN_T);
+          }
+        case 357: break;
+        case 117: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SYNC_T);
+          }
+        case 358: break;
+        case 111: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EXPOSE);
+          }
+        case 359: break;
+        case 255: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EXPIRETIMERREQUEST_T);
+          }
+        case 360: break;
+        case 187: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REFERENCES);
+          }
+        case 361: break;
+        case 22: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RBRAC);
+          }
+        case 362: break;
+        case 58: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BOOL, Boolean.TRUE);
+          }
+        case 363: break;
+        case 34: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AT);
+          }
+        case 364: break;
+        case 125: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SUBJECT);
+          }
+        case 365: break;
+        case 148: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BFIFO_T);
+          }
+        case 366: break;
+        case 170: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OBJECTIVE);
+          }
+        case 367: break;
+        case 61: 
+          { return makeSymbol(AvatarFromSysMLSymbols.LOOP);
+          }
+        case 368: break;
+        case 118: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DEFINED);
+          }
+        case 369: break;
+        case 41: 
+          { try { return makeSymbol(AvatarFromSysMLSymbols.REAL, Double.parseDouble(yytext())); }
+                  catch (NumberFormatException nfe) {
+                    setErrorLocation(new Location(yyline, yycolumn));
+                    throw new Exception ("lexing : bad format for number : " + yytext()); }
+          }
+        case 370: break;
+        case 196: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SPECIALIZES);
+          }
+        case 371: break;
+        case 236: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVSTARTSTATE_T);
+          }
+        case 372: break;
+        case 160: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AMOUNT_U);
+          }
+        case 373: break;
+        case 14: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MOD);
+          }
+        case 374: break;
+        case 16: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OR);
+          }
+        case 375: break;
+        case 116: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FIFO_T);
+          }
+        case 376: break;
+        case 154: 
+          { return makeSymbol(AvatarFromSysMLSymbols.READONLY);
+          }
+        case 377: break;
+        case 89: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AFTER);
+          }
+        case 378: break;
+        case 222: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TIMERRESETMSG_T);
+          }
+        case 379: break;
+        case 194: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RELATION_T);
+          }
+        case 380: break;
+        case 21: 
+          { return makeSymbol(AvatarFromSysMLSymbols.LBRAC);
+          }
+        case 381: break;
+        case 210: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TIMERSETMSG_T);
+          }
+        case 382: break;
+        case 52: 
+          { return makeSymbol(AvatarFromSysMLSymbols.END);
+          }
+        case 383: break;
+        case 79: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BLOCK);
+          }
+        case 384: break;
+        case 228: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVDATATYPE_T);
+          }
+        case 385: break;
+        case 44: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DOC);
+          }
+        case 386: break;
+        case 28: 
+          { return makeSymbol(AvatarFromSysMLSymbols.GETS);
+          }
+        case 387: break;
+        case 60: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BIND);
+          }
+        case 388: break;
+        case 4: 
+          { return makeSymbol(AvatarFromSysMLSymbols.POINT);
+          }
+        case 389: break;
+        case 212: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVTIMER_T);
+          }
+        case 390: break;
+        case 209: 
+          { return makeSymbol(AvatarFromSysMLSymbols.NOKREQUEST_U);
+          }
+        case 391: break;
+        case 179: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PRIVATE_F);
+          }
+        case 392: break;
+        case 11: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DIV);
+          }
+        case 393: break;
+        case 128: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REQUIRE);
+          }
+        case 394: break;
+        case 172: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VIEWPOINT);
+          }
+        case 395: break;
+        case 163: 
+          { return makeSymbol(AvatarFromSysMLSymbols.NBFIFO_T);
+          }
+        case 396: break;
+        case 237: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVCALCMETHOD_T);
+          }
+        case 397: break;
+        case 171: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PROTECTED);
+          }
+        case 398: break;
+        case 103: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ASSIGN);
+          }
+        case 399: break;
+        case 175: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.STARTSTATENAME,yytext()));
+          }
+        case 400: break;
+        case 53: 
+          { return makeSymbol(AvatarFromSysMLSymbols.USE);
+          }
+        case 401: break;
+        case 137: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EXHIBIT);
+          }
+        case 402: break;
+        case 93: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MERGE);
+          }
+        case 403: break;
+        case 84: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BOOL, Boolean.FALSE);
+          }
+        case 404: break;
+        case 36: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OF);
+          }
+        case 405: break;
+        case 250: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SETTIMERREQUEST_T);
+          }
+        case 406: break;
+        case 227: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TRIVIALREQUEST_T);
+          }
+        case 407: break;
+        case 231: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVSTOPSTATE_T);
+          }
+        case 408: break;
+        case 156: 
+          { return makeSymbol(AvatarFromSysMLSymbols.METADATA);
+          }
+        case 409: break;
+        case 145: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INDEX_F);
+          }
+        case 410: break;
+        case 81: 
+          { return makeSymbol(AvatarFromSysMLSymbols.START_U);
+          }
+        case 411: break;
+        case 115: 
+          { return makeSymbol(AvatarFromSysMLSymbols.POOL_F);
+          }
+        case 412: break;
+        case 71: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CASE);
+          }
+        case 413: break;
+        case 63: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ITEM);
+          }
+        case 414: break;
+        case 239: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVTRANSITION_T);
+          }
+        case 415: break;
+        case 25: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DO);
+          }
+        case 416: break;
+        case 173: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VARIATION);
+          }
+        case 417: break;
+        case 191: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RELATION_F);
+          }
+        case 418: break;
+        case 200: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VERIFICATION);
+          }
+        case 419: break;
+        case 152: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ALLOCATE);
+          }
+        case 420: break;
+        case 169: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RENDERING);
+          }
+        case 421: break;
+        case 15: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AND);
+          }
+        case 422: break;
+        case 98: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DECIDE);
+          }
+        case 423: break;
+        case 78: 
+          { return makeSymbol(AvatarFromSysMLSymbols.JOIN);
+          }
+        case 424: break;
+        case 7: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MINUS);
+          }
+        case 425: break;
+        case 109: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RENDER);
+          }
+        case 426: break;
+        case 64: 
+          { return makeSymbol(AvatarFromSysMLSymbols.NULL);
+          }
+        case 427: break;
+        case 66: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FROM);
+          }
+        case 428: break;
+        case 20: 
+          { return makeSymbol(AvatarFromSysMLSymbols.RPAR);
+          }
+        case 429: break;
+        case 165: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INTERFACE);
+          }
+        case 430: break;
+        case 224: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.PRESENDSTATENAME,yytext()));
+          }
+        case 431: break;
+        case 190: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CONNECTION);
+          }
+        case 432: break;
+        case 92: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EVENT);
+          }
+        case 433: break;
+        case 208: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SENDREQUEST_T);
+          }
+        case 434: break;
+        case 134: 
+          { return makeSymbol(AvatarFromSysMLSymbols.CONCERN);
+          }
+        case 435: break;
+        case 238: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVCOUNTSTATE_T);
+          }
+        case 436: break;
+        case 38: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DIF);
+          }
+        case 437: break;
+        case 91: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ENTRY);
+          }
+        case 438: break;
+        case 246: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVPRESENDSTATE_T);
+          }
+        case 439: break;
+        case 213: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.RESETTIMERSTATENAME,yytext()));
+          }
+        case 440: break;
+        case 202: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.SETTIMERSTATENAME,yytext()));
+          }
+        case 441: break;
+        case 201: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.CHANNELNAME,yytext()));
+          }
+        case 442: break;
+        case 205: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ASSIGNMENT_T);
+          }
+        case 443: break;
+        case 182: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DEPENDENCY);
+          }
+        case 444: break;
+        case 5: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.AVATARNAME,yytext()));
+          }
+        case 445: break;
+        case 217: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BOUNDRANDOM_U);
+          }
+        case 446: break;
+        case 8: 
+          { return makeSymbol(AvatarFromSysMLSymbols.GT);
+          }
+        case 447: break;
+        case 218: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.STANDARDSTATENAME,yytext()));
+          }
+        case 448: break;
+        case 149: 
+          { return makeSymbol(AvatarFromSysMLSymbols.LANGUAGE);
+          }
+        case 449: break;
+        case 77: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REAL_T);
+          }
+        case 450: break;
+        case 204: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OUTMESSAGE_T);
+          }
+        case 451: break;
+        case 83: 
+          { return makeSymbol(AvatarFromSysMLSymbols.FIRST);
+          }
+        case 452: break;
+        case 96: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SET_TM);
+          }
+        case 453: break;
+        case 223: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.RECEIVESTATENAME,yytext()));
+          }
+        case 454: break;
+        case 195: 
+          { return makeSymbol(AvatarFromSysMLSymbols.STAKEHOLDER);
+          }
+        case 455: break;
+        case 185: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INDIVIDUAL);
+          }
+        case 456: break;
+        case 167: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ATTRIBUTE);
+          }
+        case 457: break;
+        case 95: 
+          { return makeSymbol(AvatarFromSysMLSymbols.WHILE);
+          }
+        case 458: break;
+        case 3: 
+          { try { return makeSymbol(AvatarFromSysMLSymbols.INT, Integer.parseInt(yytext())); }
+                  catch (NumberFormatException nfe) {
+                    setErrorLocation(new Location(yyline, yycolumn));
+                    throw new Exception ("lexing : bad format for number : " + yytext()); }
+          }
+        case 459: break;
+        case 251: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVRESETTIMERSTATE_T);
+          }
+        case 460: break;
+        case 119: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DEFAULT);
+          }
+        case 461: break;
+        case 87: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ALIAS);
+          }
+        case 462: break;
+        case 2: 
+          { break;
+          }
+        case 463: break;
+        case 219: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.PRESETTIMERSTATENAME,yytext()));
+          }
+        case 464: break;
+        case 50: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REP);
+          }
+        case 465: break;
+        case 141: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DELAY_F);
+          }
+        case 466: break;
+        case 9: 
+          { return makeSymbol(AvatarFromSysMLSymbols.LT);
+          }
+        case 467: break;
+        case 39: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EQ);
+          }
+        case 468: break;
+        case 241: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.PRERECEIVESTATENAME,yytext()));
+          }
+        case 469: break;
+        case 45: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DEF);
+          }
+        case 470: break;
+        case 143: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.BLOCKNAME,yytext()));
+          }
+        case 471: break;
+        case 73: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ENUM);
+          }
+        case 472: break;
+        case 198: 
+          { return makeSymbol(AvatarFromSysMLSymbols.BFIFOREL_T);
+          }
+        case 473: break;
+        case 127: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IMPLIES);
+          }
+        case 474: break;
+        case 230: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INSIGNALBINDING_T);
+          }
+        case 475: break;
+        case 74: 
+          { return makeSymbol(AvatarFromSysMLSymbols.EXIT);
+          }
+        case 476: break;
+        case 136: 
+          { return makeSymbol(AvatarFromSysMLSymbols.HASTYPE);
+          }
+        case 477: break;
+        case 240: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVVOIDMETHOD_T);
+          }
+        case 478: break;
+        case 107: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ACCEPT);
+          }
+        case 479: break;
+        case 129: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ORDERED);
+          }
+        case 480: break;
+        case 216: 
+          { return makeSymbol(AvatarFromSysMLSymbols.STATEMACHINE);
+          }
+        case 481: break;
+        case 99: 
+          { return makeSymbol(AvatarFromSysMLSymbols.STRING_T);
+          }
+        case 482: break;
+        case 49: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REF);
+          }
+        case 483: break;
+        case 199: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INMESSAGE_T);
+          }
+        case 484: break;
+        case 80: 
+          { return makeSymbol(AvatarFromSysMLSymbols.STATE);
+          }
+        case 485: break;
+        case 90: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ACTOR);
+          }
+        case 486: break;
+        case 220: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.EXPIRETIMERSTATENAME,yytext()));
+          }
+        case 487: break;
+        case 126: 
+          { return makeSymbol(AvatarFromSysMLSymbols.INCLUDE);
+          }
+        case 488: break;
+        case 113: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.CHANNELPRENAME,yytext()));
+          }
+        case 489: break;
+        case 120: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DERIVED);
+          }
+        case 490: break;
+        case 123: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SATISFY);
+          }
+        case 491: break;
+        case 168: 
+          { return makeSymbol(AvatarFromSysMLSymbols.REDEFINES);
+          }
+        case 492: break;
+        case 110: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PUBLIC);
+          }
+        case 493: break;
+        case 192: 
+          { return makeSymbol(AvatarFromSysMLSymbols.MAXSIZE_F);
+          }
+        case 494: break;
+        case 188: 
+          { return makeSymbol(AvatarFromSysMLSymbols.OCCURRENCE);
+          }
+        case 495: break;
+        case 35: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AS);
+          }
+        case 496: break;
+        case 131: 
+          { return makeSymbol(AvatarFromSysMLSymbols.PRIVATE);
+          }
+        case 497: break;
+        case 88: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ASSOC);
+          }
+        case 498: break;
+        case 211: 
+          { return makeSymbol(AvatarFromSysMLSymbols.AVBLOCK_T);
+          }
+        case 499: break;
+        case 151: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ABSTRACT);
+          }
+        case 500: break;
+        case 124: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SUBSETS);
+          }
+        case 501: break;
+        case 249: 
+          { return makeSymbol(AvatarFromSysMLSymbols.DISTRIBUTION_A);
+          }
+        case 502: break;
+        case 106: 
+          { return makeSymbol(AvatarFromSysMLSymbols.ACTION);
+          }
+        case 503: break;
+        case 215: 
+          { return makeSymbol(AvatarFromSysMLSymbols.STATEACTION_F);
+          }
+        case 504: break;
+        case 214: 
+          { return makeSymbol(AvatarFromSysMLSymbols.IDENT, new Ident(AvatarFromSysMLSyntax.COUNTSTATENAME,yytext()));
+          }
+        case 505: break;
+        case 62: 
+          { return makeSymbol(AvatarFromSysMLSymbols.SEND);
+          }
+        case 506: break;
+        case 157: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TARGET_F);
+          }
+        case 507: break;
+        case 164: 
+          { return makeSymbol(AvatarFromSysMLSymbols.TIMESLICE);
+          }
+        case 508: break;
+        case 31: 
+          { return makeSymbol(AvatarFromSysMLSymbols.LEQ);
+          }
+        case 509: break;
+        case 75: 
+          { return makeSymbol(AvatarFromSysMLSymbols.VIEW);
+          }
+        case 510: break;
+        default: 
+          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+            zzAtEOF = true;
+            zzDoEOF();
+              {    return makeSymbol(AvatarFromSysMLSymbols.EOF);
+ }
+          } 
+          else {
+            zzScanError(ZZ_NO_MATCH);
+          }
+      }
+    }
+  }
+
+
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..61a38dda95cacaa1ca223a6fc5738002822f1174
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java
@@ -0,0 +1,6524 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.11b 20210814 (GIT d69c832)
+//----------------------------------------------------
+
+package avatartranslator.tosysmlv2;
+
+import java_cup.runtime.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*;
+import java.util.function.BiConsumer;
+import  static java.lang.System.out;
+import java_cup.runtime.ComplexSymbolFactory.Location;
+import java_cup.runtime.XMLElement;
+
+/** CUP v0.11b 20210814 (GIT d69c832) generated parser.
+  */
+@SuppressWarnings("unused")
+public class AvatarFromSysMLParser extends java_cup.runtime.lr_parser {
+
+ @Override
+ public final Class<?> getSymbolContainer() {
+    return AvatarFromSysMLSymbols.class;
+}
+
+  /** Default constructor. */
+  @Deprecated
+  public AvatarFromSysMLParser() {super();}
+
+  /** Constructor which sets the default scanner. */
+  @Deprecated
+  public AvatarFromSysMLParser(java_cup.runtime.Scanner s) {super(s);}
+
+  /** Constructor which sets the default scanner. */
+  public AvatarFromSysMLParser(java_cup.runtime.Scanner s, java_cup.runtime.SymbolFactory sf) {super(s,sf);}
+
+  /** Production table. */
+  protected static final short _production_table[][] = 
+    unpackFromStrings(new String[] {
+    "\000\u0146\000\002\004\007\000\002\002\004\000\002\004" +
+    "\006\000\002\005\003\000\002\005\004\000\002\006\004" +
+    "\000\002\006\004\000\002\006\003\000\002\006\003\000" +
+    "\002\006\003\000\002\006\003\000\002\006\003\000\002" +
+    "\006\003\000\002\006\003\000\002\002\003\000\002\002" +
+    "\003\000\002\002\003\000\002\007\003\000\002\007\003" +
+    "\000\002\010\003\000\002\010\003\000\002\011\013\000" +
+    "\002\012\003\000\002\012\005\000\002\013\006\000\002" +
+    "\013\005\000\002\014\007\000\002\015\003\000\002\015" +
+    "\004\000\002\016\005\000\002\101\006\000\002\102\002" +
+    "\000\002\102\004\000\002\102\005\000\002\017\003\000" +
+    "\002\017\003\000\002\017\003\000\002\020\006\000\002" +
+    "\032\011\000\002\021\006\000\002\033\011\000\002\022" +
+    "\006\000\002\034\011\000\002\023\003\000\002\023\005" +
+    "\000\002\024\003\000\002\024\003\000\002\024\003\000" +
+    "\002\024\003\000\002\024\003\000\002\025\005\000\002" +
+    "\026\005\000\002\027\005\000\002\030\005\000\002\031" +
+    "\005\000\002\035\003\000\002\035\003\000\002\035\003" +
+    "\000\002\036\016\000\002\037\016\000\002\040\016\000" +
+    "\002\041\003\000\002\041\003\000\002\042\014\000\002" +
+    "\042\014\000\002\043\014\000\002\043\014\000\002\044" +
+    "\003\000\002\044\003\000\002\045\004\000\002\053\010" +
+    "\000\002\047\004\000\002\047\005\000\002\047\005\000" +
+    "\002\050\012\000\002\050\010\000\002\046\004\000\002" +
+    "\046\005\000\002\046\005\000\002\054\011\000\002\054" +
+    "\011\000\002\051\004\000\002\051\004\000\002\052\007" +
+    "\000\002\055\004\000\002\055\004\000\002\056\007\000" +
+    "\002\057\004\000\002\057\004\000\002\060\003\000\002" +
+    "\060\003\000\002\060\003\000\002\060\003\000\002\060" +
+    "\003\000\002\060\003\000\002\060\003\000\002\061\004" +
+    "\000\002\061\006\000\002\061\007\000\002\063\006\000" +
+    "\002\062\004\000\002\062\006\000\002\100\007\000\002" +
+    "\064\003\000\002\064\003\000\002\065\005\000\002\065" +
+    "\004\000\002\065\006\000\002\076\006\000\002\066\005" +
+    "\000\002\066\006\000\002\077\006\000\002\067\003\000" +
+    "\002\067\004\000\002\070\003\000\002\070\006\000\002" +
+    "\071\007\000\002\071\007\000\002\072\013\000\002\072" +
+    "\007\000\002\073\006\000\002\073\005\000\002\073\004" +
+    "\000\002\171\007\000\002\074\003\000\002\074\004\000" +
+    "\002\075\003\000\002\075\003\000\002\103\003\000\002" +
+    "\103\003\000\002\103\003\000\002\103\003\000\002\103" +
+    "\003\000\002\103\003\000\002\103\003\000\002\103\003" +
+    "\000\002\103\003\000\002\103\003\000\002\103\003\000" +
+    "\002\103\003\000\002\104\004\000\002\104\010\000\002" +
+    "\104\011\000\002\155\007\000\002\105\004\000\002\105" +
+    "\010\000\002\105\011\000\002\156\006\000\002\106\004" +
+    "\000\002\106\010\000\002\157\007\000\002\107\004\000" +
+    "\002\107\010\000\002\107\011\000\002\160\006\000\002" +
+    "\110\004\000\002\110\010\000\002\110\011\000\002\161" +
+    "\006\000\002\111\013\000\002\111\013\000\002\111\011" +
+    "\000\002\162\006\000\002\112\011\000\002\112\013\000" +
+    "\002\112\013\000\002\163\006\000\002\113\011\000\002" +
+    "\164\006\000\002\114\011\000\002\165\006\000\002\115" +
+    "\011\000\002\115\010\000\002\115\004\000\002\166\006" +
+    "\000\002\116\011\000\002\116\010\000\002\116\004\000" +
+    "\002\167\006\000\002\117\011\000\002\117\010\000\002" +
+    "\117\004\000\002\170\006\000\002\120\010\000\002\120" +
+    "\007\000\002\120\011\000\002\120\005\000\002\121\005" +
+    "\000\002\122\003\000\002\122\005\000\002\123\014\000" +
+    "\002\123\004\000\002\227\002\000\002\124\003\000\002" +
+    "\124\003\000\002\124\003\000\002\124\003\000\002\124" +
+    "\003\000\002\124\003\000\002\125\003\000\002\125\005" +
+    "\000\002\147\004\000\002\130\005\000\002\150\004\000" +
+    "\002\131\005\000\002\151\004\000\002\132\005\000\002" +
+    "\152\004\000\002\133\005\000\002\153\004\000\002\134" +
+    "\005\000\002\154\004\000\002\126\003\000\002\126\005" +
+    "\000\002\127\003\000\002\127\003\000\002\127\003\000" +
+    "\002\127\003\000\002\127\003\000\002\127\003\000\002" +
+    "\127\003\000\002\135\005\000\002\136\005\000\002\226" +
+    "\003\000\002\137\003\000\002\137\003\000\002\141\010" +
+    "\000\002\142\007\000\002\142\006\000\002\142\004\000" +
+    "\002\142\007\000\002\142\006\000\002\172\004\000\002" +
+    "\143\005\000\002\144\007\000\002\145\007\000\002\146" +
+    "\007\000\002\204\003\000\002\204\005\000\002\174\005" +
+    "\000\002\212\003\000\002\213\003\000\002\213\005\000" +
+    "\002\173\012\000\002\173\012\000\002\175\005\000\002" +
+    "\140\010\000\002\176\012\000\002\176\012\000\002\177" +
+    "\011\000\002\200\006\000\002\200\007\000\002\200\010" +
+    "\000\002\200\011\000\002\205\007\000\002\205\013\000" +
+    "\002\201\005\000\002\201\006\000\002\201\005\000\002" +
+    "\201\006\000\002\214\006\000\002\215\006\000\002\207" +
+    "\010\000\002\207\006\000\002\202\007\000\002\202\005" +
+    "\000\002\203\007\000\002\203\006\000\002\211\003\000" +
+    "\002\003\003\000\002\210\004\000\002\210\004\000\002" +
+    "\216\013\000\002\217\010\000\002\217\006\000\002\220" +
+    "\006\000\002\220\004\000\002\221\012\000\002\206\004" +
+    "\000\002\206\005\000\002\222\003\000\002\222\003\000" +
+    "\002\222\003\000\002\223\010\000\002\224\010\000\002" +
+    "\224\010\000\002\225\010\000\002\225\010\000\002\230" +
+    "\003\000\002\230\003\000\002\230\003\000\002\231\003" +
+    "\000\002\233\003\000\002\233\003\000\002\234\005\000" +
+    "\002\234\005\000\002\234\005\000\002\234\005\000\002" +
+    "\234\005\000\002\234\004\000\002\234\005\000\002\234" +
+    "\005\000\002\234\004\000\002\234\005\000\002\234\005" +
+    "\000\002\234\005\000\002\234\005\000\002\234\005\000" +
+    "\002\234\005\000\002\234\005\000\002\234\003\000\002" +
+    "\234\003\000\002\235\003\000\002\235\005\000\002\232" +
+    "\004\000\002\232\005\000\002\236\004\000\002\243\003" +
+    "\000\002\243\005\000\002\240\003\000\002\237\003\000" +
+    "\002\237\003\000\002\237\003\000\002\241\004\000\002" +
+    "\241\005\000\002\242\004" });
+
+  /** Access to production table. */
+  @Override
+  public short[][] production_table() {return _production_table;}
+
+  /** Parse-action table. */
+  protected static final short[][] _action_table = 
+    unpackFromStrings(new String[] {
+    "\000\u0338\000\004\260\005\001\002\000\004\002\u033a\001" +
+    "\002\000\004\141\006\001\002\000\004\014\007\001\002" +
+    "\000\016\015\031\164\020\166\041\262\047\265\014\267" +
+    "\025\001\002\000\016\015\ufff4\164\ufff4\166\ufff4\262\ufff4" +
+    "\265\ufff4\267\ufff4\001\002\000\016\015\ufff7\164\ufff7\166" +
+    "\ufff7\262\ufff7\265\ufff7\267\ufff7\001\002\000\016\015\uffdd" +
+    "\164\uffdd\166\uffdd\262\uffdd\265\uffdd\267\uffdd\001\002\000" +
+    "\016\015\uffde\164\uffde\166\uffde\262\uffde\265\uffde\267\uffde" +
+    "\001\002\000\004\232\u0339\001\002\000\016\015\uffbe\164" +
+    "\uffbe\166\uffbe\262\uffbe\265\uffbe\267\uffbe\001\002\000\014" +
+    "\025\u031b\026\u031e\027\u0315\031\u031c\032\u0314\001\002\000" +
+    "\016\015\uffc4\164\uffc4\166\uffc4\262\uffc4\265\uffc4\267\uffc4" +
+    "\001\002\000\004\201\u0332\001\002\000\016\015\ufffe\164" +
+    "\020\166\041\262\047\265\014\267\025\001\002\000\014" +
+    "\025\u031b\026\u031e\027\u0315\031\u031c\032\u0314\001\002\000" +
+    "\016\015\uffc9\164\uffc9\166\uffc9\262\uffc9\265\uffc9\267\uffc9" +
+    "\001\002\000\016\015\ufff9\164\ufff9\166\ufff9\262\ufff9\265" +
+    "\ufff9\267\ufff9\001\002\000\004\232\u032d\001\002\000\016" +
+    "\015\uffca\164\uffca\166\uffca\262\uffca\265\uffca\267\uffca\001" +
+    "\002\000\016\015\uffc3\164\uffc3\166\uffc3\262\uffc3\265\uffc3" +
+    "\267\uffc3\001\002\000\016\015\uffc8\164\uffc8\166\uffc8\262" +
+    "\uffc8\265\uffc8\267\uffc8\001\002\000\004\002\uffff\001\002" +
+    "\000\016\015\uffbd\164\uffbd\166\uffbd\262\uffbd\265\uffbd\267" +
+    "\uffbd\001\002\000\014\025\u031b\026\u031e\027\u0315\031\u031c" +
+    "\032\u0314\001\002\000\006\014\u0308\017\u0307\001\002\000" +
+    "\016\015\ufff6\164\ufff6\166\ufff6\262\ufff6\265\ufff6\267\ufff6" +
+    "\001\002\000\016\015\ufffa\164\ufffa\166\ufffa\262\ufffa\265" +
+    "\ufffa\267\ufffa\001\002\000\006\164\277\265\u02f7\001\002" +
+    "\000\004\014\u02f0\001\002\000\004\020\u02d5\001\002\000" +
+    "\020\015\164\145\172\164\157\171\163\215\154\262\201" +
+    "\270\156\001\002\000\004\015\152\001\002\000\016\015" +
+    "\ufff5\164\ufff5\166\ufff5\262\ufff5\265\ufff5\267\ufff5\001\002" +
+    "\000\016\015\uffdf\164\uffdf\166\uffdf\262\uffdf\265\uffdf\267" +
+    "\uffdf\001\002\000\016\015\ufff8\164\ufff8\166\ufff8\262\ufff8" +
+    "\265\ufff8\267\ufff8\001\002\000\006\141\051\201\050\001" +
+    "\002\000\004\141\136\001\002\000\004\020\052\001\002" +
+    "\000\020\050\060\051\061\052\056\057\054\060\057\061" +
+    "\053\101\055\001\002\000\004\022\126\001\002\000\004" +
+    "\022\116\001\002\000\010\014\104\311\106\333\105\001" +
+    "\002\000\004\022\100\001\002\000\004\022\070\001\002" +
+    "\000\004\022\065\001\002\000\004\022\062\001\002\000" +
+    "\004\051\063\001\002\000\004\012\064\001\002\000\014" +
+    "\025\uffd7\026\uffd7\027\uffd7\031\uffd7\032\uffd7\001\002\000" +
+    "\004\050\066\001\002\000\004\012\067\001\002\000\014" +
+    "\025\uffdb\026\uffdb\027\uffdb\031\uffdb\032\uffdb\001\002\000" +
+    "\004\060\071\001\002\000\004\012\072\001\002\000\004" +
+    "\030\073\001\002\000\004\022\074\001\002\000\004\141" +
+    "\075\001\002\000\004\013\076\001\002\000\004\017\077" +
+    "\001\002\000\016\015\uffc6\164\uffc6\166\uffc6\262\uffc6\265" +
+    "\uffc6\267\uffc6\001\002\000\004\052\101\001\002\000\004" +
+    "\012\102\001\002\000\014\025\uffd9\026\uffd9\027\uffd9\031" +
+    "\uffd9\032\uffd9\001\002\000\004\141\110\001\002\000\020" +
+    "\015\uffab\145\uffab\164\uffab\171\uffab\215\uffab\262\uffab\270" +
+    "\uffab\001\002\000\004\141\uffed\001\002\000\004\141\uffee" +
+    "\001\002\000\004\022\113\001\002\000\010\017\uffeb\021" +
+    "\111\022\uffeb\001\002\000\004\141\110\001\002\000\006" +
+    "\017\uffea\022\uffea\001\002\000\004\141\110\001\002\000" +
+    "\004\017\115\001\002\000\016\015\uffec\164\uffec\166\uffec" +
+    "\262\uffec\265\uffec\267\uffec\001\002\000\004\057\117\001" +
+    "\002\000\004\012\120\001\002\000\004\030\121\001\002" +
+    "\000\004\022\122\001\002\000\004\141\123\001\002\000" +
+    "\004\013\124\001\002\000\004\017\125\001\002\000\016" +
+    "\015\uffc5\164\uffc5\166\uffc5\262\uffc5\265\uffc5\267\uffc5\001" +
+    "\002\000\004\061\127\001\002\000\004\012\130\001\002" +
+    "\000\004\030\131\001\002\000\004\022\132\001\002\000" +
+    "\004\141\133\001\002\000\004\013\134\001\002\000\004" +
+    "\017\135\001\002\000\016\015\uffc7\164\uffc7\166\uffc7\262" +
+    "\uffc7\265\uffc7\267\uffc7\001\002\000\006\305\137\333\141" +
+    "\001\002\000\012\053\ufff0\054\ufff0\100\ufff0\141\ufff0\001" +
+    "\002\000\010\053\142\054\144\141\143\001\002\000\012" +
+    "\053\uffef\054\uffef\100\uffef\141\uffef\001\002\000\004\014" +
+    "\151\001\002\000\004\016\147\001\002\000\004\016\145" +
+    "\001\002\000\004\141\146\001\002\000\006\014\uffb2\017" +
+    "\uffb2\001\002\000\004\054\150\001\002\000\006\014\uffb1" +
+    "\017\uffb1\001\002\000\006\164\uffbb\265\uffbb\001\002\000" +
+    "\004\002\001\001\002\000\020\015\uff99\145\uff99\164\uff99" +
+    "\171\uff99\215\uff99\262\uff99\270\uff99\001\002\000\004\307" +
+    "\u02d1\001\002\000\020\015\uffa3\145\uffa3\164\uffa3\171\uffa3" +
+    "\215\uffa3\262\uffa3\270\uffa3\001\002\000\004\164\u02cd\001" +
+    "\002\000\004\141\u02ca\001\002\000\020\015\uffa4\145\uffa4" +
+    "\164\uffa4\171\uffa4\215\uffa4\262\uffa4\270\uffa4\001\002\000" +
+    "\010\017\u02c3\023\u02c4\202\u02c2\001\002\000\020\015\uffa7" +
+    "\145\uffa7\164\uffa7\171\uffa7\215\uffa7\262\uffa7\270\uffa7\001" +
+    "\002\000\004\141\u02bf\001\002\000\026\015\uffad\145\uffad" +
+    "\164\uffad\166\uffad\171\uffad\215\uffad\262\uffad\265\uffad\267" +
+    "\uffad\270\uffad\001\002\000\004\014\u02b4\001\002\000\020" +
+    "\015\u02b2\145\172\164\157\171\163\215\154\262\201\270" +
+    "\156\001\002\000\020\015\uffa6\145\uffa6\164\uffa6\171\uffa6" +
+    "\215\uffa6\262\uffa6\270\uffa6\001\002\000\026\015\uffac\145" +
+    "\uffac\164\uffac\166\uffac\171\uffac\215\uffac\262\uffac\265\uffac" +
+    "\267\uffac\270\uffac\001\002\000\020\015\uff9a\145\uff9a\164" +
+    "\uff9a\171\uff9a\215\uff9a\262\uff9a\270\uff9a\001\002\000\004" +
+    "\141\u02af\001\002\000\020\015\uffa5\145\uffa5\164\uffa5\171" +
+    "\uffa5\215\uffa5\262\uffa5\270\uffa5\001\002\000\006\014\323" +
+    "\017\322\001\002\000\006\014\275\017\274\001\002\000" +
+    "\020\015\uffa8\145\uffa8\164\uffa8\171\uffa8\215\uffa8\262\uffa8" +
+    "\270\uffa8\001\002\000\006\017\220\023\221\001\002\000" +
+    "\020\015\uffa2\145\uffa2\164\uffa2\171\uffa2\215\uffa2\262\uffa2" +
+    "\270\uffa2\001\002\000\004\141\202\001\002\000\004\020" +
+    "\203\001\002\000\012\055\206\056\204\101\205\133\207" +
+    "\001\002\000\004\017\217\001\002\000\004\014\104\001" +
+    "\002\000\004\017\216\001\002\000\006\017\210\022\211" +
+    "\001\002\000\020\015\uff8a\145\uff8a\164\uff8a\171\uff8a\215" +
+    "\uff8a\262\uff8a\270\uff8a\001\002\000\004\133\212\001\002" +
+    "\000\004\012\213\001\002\000\004\013\214\001\002\000" +
+    "\004\017\215\001\002\000\020\015\uff8b\145\uff8b\164\uff8b" +
+    "\171\uff8b\215\uff8b\262\uff8b\270\uff8b\001\002\000\020\015" +
+    "\uff8c\145\uff8c\164\uff8c\171\uff8c\215\uff8c\262\uff8c\270\uff8c" +
+    "\001\002\000\020\015\uff8d\145\uff8d\164\uff8d\171\uff8d\215" +
+    "\uff8d\262\uff8d\270\uff8d\001\002\000\020\015\uff9d\145\uff9d" +
+    "\164\uff9d\171\uff9d\215\uff9d\262\uff9d\270\uff9d\001\002\000" +
+    "\016\004\223\005\225\012\227\141\224\251\232\336\222" +
+    "\001\002\000\016\004\223\005\225\012\227\141\224\251" +
+    "\232\336\222\001\002\000\044\011\ufecb\013\ufecb\016\ufecb" +
+    "\017\ufecb\024\ufecb\155\ufecb\255\ufecb\335\ufecb\336\ufecb\337" +
+    "\ufecb\340\ufecb\341\ufecb\342\ufecb\343\ufecb\344\ufecb\345\ufecb" +
+    "\346\ufecb\001\002\000\046\011\ufec9\013\ufec9\016\ufec9\017" +
+    "\ufec9\021\271\024\ufec9\155\ufec9\255\ufec9\335\ufec9\336\ufec9" +
+    "\337\ufec9\340\ufec9\341\ufec9\342\ufec9\343\ufec9\344\ufec9\345" +
+    "\ufec9\346\ufec9\001\002\000\044\011\ufeca\013\ufeca\016\ufeca" +
+    "\017\ufeca\024\ufeca\155\ufeca\255\ufeca\335\ufeca\336\ufeca\337" +
+    "\ufeca\340\ufeca\341\ufeca\342\ufeca\343\ufeca\344\ufeca\345\ufeca" +
+    "\346\ufeca\001\002\000\044\011\ufedc\013\ufedc\016\ufedc\017" +
+    "\ufedc\024\ufedc\155\ufedc\255\ufedc\335\ufedc\336\ufedc\337\ufedc" +
+    "\340\ufedc\341\ufedc\342\ufedc\343\ufedc\344\ufedc\345\ufedc\346" +
+    "\ufedc\001\002\000\016\004\223\005\225\012\227\141\224" +
+    "\251\232\336\222\001\002\000\036\011\242\017\266\155" +
+    "\235\255\247\335\241\336\234\337\236\340\243\341\237" +
+    "\342\240\343\246\344\244\345\250\346\245\001\002\000" +
+    "\044\011\ufedd\013\ufedd\016\ufedd\017\ufedd\024\ufedd\155\ufedd" +
+    "\255\ufedd\335\ufedd\336\ufedd\337\ufedd\340\ufedd\341\ufedd\342" +
+    "\ufedd\343\ufedd\344\ufedd\345\ufedd\346\ufedd\001\002\000\016" +
+    "\004\223\005\225\012\227\141\224\251\232\336\222\001" +
+    "\002\000\044\011\242\013\ufed3\016\ufed3\017\ufed3\024\ufed3" +
+    "\155\ufed3\255\ufed3\335\241\336\234\337\236\340\243\341" +
+    "\237\342\240\343\246\344\244\345\250\346\245\001\002" +
+    "\000\016\004\223\005\225\012\227\141\224\251\232\336" +
+    "\222\001\002\000\016\004\223\005\225\012\227\141\224" +
+    "\251\232\336\222\001\002\000\016\004\223\005\225\012" +
+    "\227\141\224\251\232\336\222\001\002\000\016\004\223" +
+    "\005\225\012\227\141\224\251\232\336\222\001\002\000" +
+    "\016\004\223\005\225\012\227\141\224\251\232\336\222" +
+    "\001\002\000\016\004\223\005\225\012\227\141\224\251" +
+    "\232\336\222\001\002\000\016\004\223\005\225\012\227" +
+    "\141\224\251\232\336\222\001\002\000\016\004\223\005" +
+    "\225\012\227\141\224\251\232\336\222\001\002\000\016" +
+    "\004\223\005\225\012\227\141\224\251\232\336\222\001" +
+    "\002\000\016\004\223\005\225\012\227\141\224\251\232" +
+    "\336\222\001\002\000\016\004\223\005\225\012\227\141" +
+    "\224\251\232\336\222\001\002\000\016\004\223\005\225" +
+    "\012\227\141\224\251\232\336\222\001\002\000\016\004" +
+    "\223\005\225\012\227\141\224\251\232\336\222\001\002" +
+    "\000\034\011\ufed0\013\ufed0\016\ufed0\017\ufed0\024\ufed0\155" +
+    "\ufed0\255\ufed0\335\241\336\234\337\236\340\243\341\237" +
+    "\342\ufed0\001\002\000\044\011\242\013\ufed5\016\ufed5\017" +
+    "\ufed5\024\ufed5\155\235\255\ufed5\335\241\336\234\337\236" +
+    "\340\243\341\237\342\240\343\246\344\244\345\250\346" +
+    "\245\001\002\000\034\011\ufed2\013\ufed2\016\ufed2\017\ufed2" +
+    "\024\ufed2\155\ufed2\255\ufed2\335\241\336\234\337\236\340" +
+    "\243\341\237\342\ufed2\001\002\000\034\011\ufecf\013\ufecf" +
+    "\016\ufecf\017\ufecf\024\ufecf\155\ufecf\255\ufecf\335\241\336" +
+    "\234\337\236\340\243\341\237\342\ufecf\001\002\000\034" +
+    "\011\ufed1\013\ufed1\016\ufed1\017\ufed1\024\ufed1\155\ufed1\255" +
+    "\ufed1\335\241\336\234\337\236\340\243\341\237\342\ufed1" +
+    "\001\002\000\044\011\ufed8\013\ufed8\016\ufed8\017\ufed8\024" +
+    "\ufed8\155\ufed8\255\ufed8\335\ufed8\336\ufed8\337\ufed8\340\ufed8" +
+    "\341\ufed8\342\ufed8\343\ufed8\344\ufed8\345\ufed8\346\ufed8\001" +
+    "\002\000\044\011\ufece\013\ufece\016\ufece\017\ufece\024\ufece" +
+    "\155\ufece\255\ufece\335\241\336\234\337\236\340\243\341" +
+    "\237\342\ufece\343\246\344\244\345\250\346\245\001\002" +
+    "\000\044\011\ufedb\013\ufedb\016\ufedb\017\ufedb\024\ufedb\155" +
+    "\ufedb\255\ufedb\335\ufedb\336\ufedb\337\236\340\243\341\237" +
+    "\342\ufedb\343\ufedb\344\ufedb\345\ufedb\346\ufedb\001\002\000" +
+    "\044\011\ufecd\013\ufecd\016\ufecd\017\ufecd\024\ufecd\155\ufecd" +
+    "\255\ufecd\335\241\336\234\337\236\340\243\341\237\342" +
+    "\ufecd\343\246\344\244\345\250\346\245\001\002\000\044" +
+    "\011\ufed7\013\ufed7\016\ufed7\017\ufed7\024\ufed7\155\ufed7\255" +
+    "\ufed7\335\ufed7\336\ufed7\337\ufed7\340\ufed7\341\ufed7\342\ufed7" +
+    "\343\ufed7\344\ufed7\345\ufed7\346\ufed7\001\002\000\044\011" +
+    "\ufed9\013\ufed9\016\ufed9\017\ufed9\024\ufed9\155\ufed9\255\ufed9" +
+    "\335\ufed9\336\ufed9\337\ufed9\340\ufed9\341\ufed9\342\ufed9\343" +
+    "\ufed9\344\ufed9\345\ufed9\346\ufed9\001\002\000\044\011\242" +
+    "\013\ufed4\016\ufed4\017\ufed4\024\ufed4\155\ufed4\255\ufed4\335" +
+    "\241\336\234\337\236\340\243\341\237\342\240\343\246" +
+    "\344\244\345\250\346\245\001\002\000\044\011\ufeda\013" +
+    "\ufeda\016\ufeda\017\ufeda\024\ufeda\155\ufeda\255\ufeda\335\ufeda" +
+    "\336\ufeda\337\236\340\243\341\237\342\ufeda\343\ufeda\344" +
+    "\ufeda\345\ufeda\346\ufeda\001\002\000\020\015\uff9c\145\uff9c" +
+    "\164\uff9c\171\uff9c\215\uff9c\262\uff9c\270\uff9c\001\002\000" +
+    "\036\011\242\013\270\155\235\255\247\335\241\336\234" +
+    "\337\236\340\243\341\237\342\240\343\246\344\244\345" +
+    "\250\346\245\001\002\000\044\011\ufecc\013\ufecc\016\ufecc" +
+    "\017\ufecc\024\ufecc\155\ufecc\255\ufecc\335\ufecc\336\ufecc\337" +
+    "\ufecc\340\ufecc\341\ufecc\342\ufecc\343\ufecc\344\ufecc\345\ufecc" +
+    "\346\ufecc\001\002\000\004\141\224\001\002\000\044\011" +
+    "\ufec8\013\ufec8\016\ufec8\017\ufec8\024\ufec8\155\ufec8\255\ufec8" +
+    "\335\ufec8\336\ufec8\337\ufec8\340\ufec8\341\ufec8\342\ufec8\343" +
+    "\ufec8\344\ufec8\345\ufec8\346\ufec8\001\002\000\044\011\ufed6" +
+    "\013\ufed6\016\ufed6\017\ufed6\024\ufed6\155\ufed6\255\ufed6\335" +
+    "\ufed6\336\ufed6\337\ufed6\340\ufed6\341\ufed6\342\ufed6\343\ufed6" +
+    "\344\ufed6\345\ufed6\346\ufed6\001\002\000\020\015\uff97\145" +
+    "\uff97\164\uff97\171\uff97\215\uff97\262\uff97\270\uff97\001\002" +
+    "\000\006\015\300\164\277\001\002\000\004\015\321\001" +
+    "\002\000\004\141\313\001\002\000\020\015\uff98\145\uff98" +
+    "\164\uff98\171\uff98\215\uff98\262\uff98\270\uff98\001\002\000" +
+    "\010\015\uffe6\164\277\265\uffe6\001\002\000\010\017\uffe2" +
+    "\023\304\202\303\001\002\000\004\023\310\001\002\000" +
+    "\016\004\223\005\225\012\227\141\224\251\232\336\222" +
+    "\001\002\000\004\017\306\001\002\000\012\015\uffe4\164" +
+    "\uffe4\265\uffe4\301\uffe4\001\002\000\036\011\242\017\uffe1" +
+    "\155\235\255\247\335\241\336\234\337\236\340\243\341" +
+    "\237\342\240\343\246\344\244\345\250\346\245\001\002" +
+    "\000\016\004\223\005\225\012\227\141\224\251\232\336" +
+    "\222\001\002\000\036\011\242\017\uffe0\155\235\255\247" +
+    "\335\241\336\234\337\236\340\243\341\237\342\240\343" +
+    "\246\344\244\345\250\346\245\001\002\000\006\015\uffe5" +
+    "\265\uffe5\001\002\000\004\020\314\001\002\000\010\074" +
+    "\320\075\317\141\316\001\002\000\010\017\uffe3\023\uffe3" +
+    "\202\uffe3\001\002\000\010\017\ufff1\023\ufff1\202\ufff1\001" +
+    "\002\000\010\017\ufff3\023\ufff3\202\ufff3\001\002\000\010" +
+    "\017\ufff2\023\ufff2\202\ufff2\001\002\000\020\015\uff96\145" +
+    "\uff96\164\uff96\171\uff96\215\uff96\262\uff96\270\uff96\001\002" +
+    "\000\020\015\uff87\145\uff87\164\uff87\171\uff87\215\uff87\262" +
+    "\uff87\270\uff87\001\002\000\014\015\344\212\353\216\324" +
+    "\307\356\316\365\001\002\000\004\145\u02ab\001\002\000" +
+    "\004\022\u0289\001\002\000\014\015\uff7c\212\uff7c\216\uff7c" +
+    "\307\uff7c\316\uff7c\001\002\000\014\015\uff77\212\uff77\216" +
+    "\uff77\307\uff77\316\uff77\001\002\000\006\017\u0280\022\u0281" +
+    "\001\002\000\014\015\uff7f\212\uff7f\216\uff7f\307\uff7f\316" +
+    "\uff7f\001\002\000\004\022\u0258\001\002\000\006\017\u024f" +
+    "\022\u0250\001\002\000\014\015\uff83\212\uff83\216\uff83\307" +
+    "\uff83\316\uff83\001\002\000\006\206\u01dc\313\u01de\001\002" +
+    "\000\014\015\uff78\212\uff78\216\uff78\307\uff78\316\uff78\001" +
+    "\002\000\014\015\uff80\212\uff80\216\uff80\307\uff80\316\uff80" +
+    "\001\002\000\014\015\uff81\212\uff81\216\uff81\307\uff81\316" +
+    "\uff81\001\002\000\014\015\uff79\212\uff79\216\uff79\307\uff79" +
+    "\316\uff79\001\002\000\006\017\u01c4\022\u01c5\001\002\000" +
+    "\014\015\uff76\212\uff76\216\uff76\307\uff76\316\uff76\001\002" +
+    "\000\020\015\uff88\145\uff88\164\uff88\171\uff88\215\uff88\262" +
+    "\uff88\270\uff88\001\002\000\004\015\u01c3\001\002\000\006" +
+    "\017\u01ba\022\u01bb\001\002\000\006\017\u01b1\022\u01b2\001" +
+    "\002\000\006\017\u01ab\022\u01ac\001\002\000\004\022\u01a5" +
+    "\001\002\000\014\015\uff85\212\353\216\324\307\356\316" +
+    "\365\001\002\000\004\145\u01a0\001\002\000\014\015\uff7a" +
+    "\212\uff7a\216\uff7a\307\uff7a\316\uff7a\001\002\000\014\015" +
+    "\uff7d\212\uff7d\216\uff7d\307\uff7d\316\uff7d\001\002\000\004" +
+    "\141\u0194\001\002\000\014\015\uff7e\212\uff7e\216\uff7e\307" +
+    "\uff7e\316\uff7e\001\002\000\014\015\uff82\212\uff82\216\uff82" +
+    "\307\uff82\316\uff82\001\002\000\006\017\u018b\022\u018c\001" +
+    "\002\000\004\022\u0185\001\002\000\006\017\376\022\377" +
+    "\001\002\000\014\015\uff7b\212\uff7b\216\uff7b\307\uff7b\316" +
+    "\uff7b\001\002\000\004\020\366\001\002\000\004\115\367" +
+    "\001\002\000\004\221\370\001\002\000\004\141\371\001" +
+    "\002\000\010\206\uff03\230\372\313\uff03\001\002\000\004" +
+    "\036\373\001\002\000\004\011\374\001\002\000\004\004" +
+    "\375\001\002\000\006\206\uff02\313\uff02\001\002\000\014" +
+    "\015\uff4c\212\uff4c\216\uff4c\307\uff4c\316\uff4c\001\002\000" +
+    "\004\124\u0100\001\002\000\004\012\u0101\001\002\000\006" +
+    "\013\u0104\034\u0102\001\002\000\004\022\u0108\001\002\000" +
+    "\004\013\u0106\001\002\000\004\017\u0105\001\002\000\014" +
+    "\015\uff4d\212\uff4d\216\uff4d\307\uff4d\316\uff4d\001\002\000" +
+    "\004\017\u0107\001\002\000\014\015\uff4e\212\uff4e\216\uff4e" +
+    "\307\uff4e\316\uff4e\001\002\000\022\065\uff41\066\uff41\067" +
+    "\uff41\070\uff41\125\uff41\126\uff41\127\uff41\230\uff41\001\002" +
+    "\000\006\013\uff46\016\uff46\001\002\000\022\065\u011c\066" +
+    "\u0110\067\u010f\070\u0113\125\u011b\126\u0119\127\u010d\230\u0111" +
+    "\001\002\000\010\013\uff3e\016\uff3e\210\uff3e\001\002\000" +
+    "\012\036\u0128\037\u012b\040\u0122\041\u0129\001\002\000\004" +
+    "\012\u0182\001\002\000\012\036\u0128\037\u012b\040\u0122\041" +
+    "\u0129\001\002\000\004\012\u017f\001\002\000\010\013\uff3a" +
+    "\016\uff3a\210\uff3a\001\002\000\016\004\223\005\225\012" +
+    "\227\141\224\251\232\336\222\001\002\000\012\036\u0128" +
+    "\037\u012b\040\u0122\041\u0129\001\002\000\004\012\u0174\001" +
+    "\002\000\010\013\uff3d\016\uff3d\210\uff3d\001\002\000\012" +
+    "\036\u0128\037\u012b\040\u0122\041\u0129\001\002\000\012\036" +
+    "\u0128\037\u012b\040\u0122\041\u0129\001\002\000\006\013\uff42" +
+    "\016\uff42\001\002\000\010\013\uff3c\016\uff3c\210\uff3c\001" +
+    "\002\000\004\012\u016f\001\002\000\010\013\uff40\016\uff40" +
+    "\210\uff40\001\002\000\004\012\u016e\001\002\000\004\012" +
+    "\u016d\001\002\000\010\013\uff3b\016\uff3b\210\uff3b\001\002" +
+    "\000\010\013\uff3f\016\uff3f\210\uff3f\001\002\000\012\036" +
+    "\u0128\037\u012b\040\u0122\041\u0129\001\002\000\006\013\uff2a" +
+    "\016\uff2a\001\002\000\006\013\uff27\016\uff27\001\002\000" +
+    "\004\022\u016c\001\002\000\006\013\uff2b\016\uff2b\001\002" +
+    "\000\004\013\u016b\001\002\000\006\013\uff2d\016\u0169\001" +
+    "\002\000\010\130\u0142\131\u0141\141\u0143\001\002\000\006" +
+    "\013\uff28\016\uff28\001\002\000\004\022\u013f\001\002\000" +
+    "\004\022\u0139\001\002\000\006\013\uff25\016\uff25\001\002" +
+    "\000\004\022\uff22\001\002\000\006\013\uff26\016\uff26\001" +
+    "\002\000\004\022\u012f\001\002\000\006\013\uff29\016\uff29" +
+    "\001\002\000\020\004\223\005\225\012\227\073\u0131\141" +
+    "\224\251\232\336\222\001\002\000\006\013\uff23\016\uff23" +
+    "\001\002\000\004\012\u0134\001\002\000\006\013\uff20\016" +
+    "\uff20\001\002\000\040\011\242\013\uff21\016\uff21\155\235" +
+    "\255\247\335\241\336\234\337\236\340\243\341\237\342" +
+    "\240\343\246\344\244\345\250\346\245\001\002\000\016" +
+    "\004\223\005\225\012\227\141\224\251\232\336\222\001" +
+    "\002\000\036\011\242\016\u0136\155\235\255\247\335\241" +
+    "\336\234\337\236\340\243\341\237\342\240\343\246\344" +
+    "\244\345\250\346\245\001\002\000\016\004\223\005\225" +
+    "\012\227\141\224\251\232\336\222\001\002\000\036\011" +
+    "\242\013\u0138\155\235\255\247\335\241\336\234\337\236" +
+    "\340\243\341\237\342\240\343\246\344\244\345\250\346" +
+    "\245\001\002\000\006\013\uff1f\016\uff1f\001\002\000\004" +
+    "\141\u013a\001\002\000\010\013\uff18\016\uff18\021\u013b\001" +
+    "\002\000\010\134\u013c\135\u013e\136\u013d\001\002\000\006" +
+    "\013\uff17\016\uff17\001\002\000\006\013\uff15\016\uff15\001" +
+    "\002\000\006\013\uff16\016\uff16\001\002\000\004\004\u0140" +
+    "\001\002\000\006\013\uff24\016\uff24\001\002\000\004\012" +
+    "\u0167\001\002\000\004\012\u0163\001\002\000\010\012\u0144" +
+    "\013\uff1c\016\uff1c\001\002\000\020\004\223\005\225\012" +
+    "\227\013\u014b\141\u0147\251\232\336\222\001\002\000\006" +
+    "\013\uff14\016\uff14\001\002\000\020\004\223\005\225\012" +
+    "\227\013\u0158\141\u0154\251\232\336\222\001\002\000\046" +
+    "\011\ufec9\012\u0151\013\ufec9\016\ufec9\017\ufec9\021\271\155" +
+    "\ufec9\255\ufec9\335\ufec9\336\ufec9\337\ufec9\340\ufec9\341\ufec9" +
+    "\342\ufec9\343\ufec9\344\ufec9\345\ufec9\346\ufec9\001\002\000" +
+    "\042\011\ufedc\013\ufedf\016\ufedf\017\ufedf\155\ufedc\255\ufedc" +
+    "\335\ufedc\336\ufedc\337\ufedc\340\ufedc\341\ufedc\342\ufedc\343" +
+    "\ufedc\344\ufedc\345\ufedc\346\ufedc\001\002\000\006\013\u014f" +
+    "\016\u014e\001\002\000\034\011\242\155\235\255\247\335" +
+    "\241\336\234\337\236\340\243\341\237\342\240\343\246" +
+    "\344\244\345\250\346\245\001\002\000\006\013\uff1d\016" +
+    "\uff1d\001\002\000\042\011\ufedd\013\ufee0\016\ufee0\017\ufee0" +
+    "\155\ufedd\255\ufedd\335\ufedd\336\ufedd\337\ufedd\340\ufedd\341" +
+    "\ufedd\342\ufedd\343\ufedd\344\ufedd\345\ufedd\346\ufedd\001\002" +
+    "\000\010\013\ufee1\016\ufee1\017\ufee1\001\002\000\016\004" +
+    "\223\005\225\012\227\141\u0147\251\232\336\222\001\002" +
+    "\000\006\013\uff1e\016\uff1e\001\002\000\006\013\uff13\016" +
+    "\uff13\001\002\000\020\004\ufec5\005\ufec5\012\ufec5\013\ufec5" +
+    "\141\ufec5\251\ufec5\336\ufec5\001\002\000\016\004\223\005" +
+    "\225\012\227\141\u0154\251\232\336\222\001\002\000\004" +
+    "\013\u0160\001\002\000\044\011\ufec9\012\u015f\013\ufec9\016" +
+    "\ufec9\021\271\155\ufec9\255\ufec9\335\ufec9\336\ufec9\337\ufec9" +
+    "\340\ufec9\341\ufec9\342\ufec9\343\ufec9\344\ufec9\345\ufec9\346" +
+    "\ufec9\001\002\000\006\013\ufec4\016\u015c\001\002\000\040" +
+    "\011\ufedc\013\ufec0\016\ufec0\155\ufedc\255\ufedc\335\ufedc\336" +
+    "\ufedc\337\ufedc\340\ufedc\341\ufedc\342\ufedc\343\ufedc\344\ufedc" +
+    "\345\ufedc\346\ufedc\001\002\000\004\013\u015b\001\002\000" +
+    "\010\013\ufec7\016\ufec7\017\ufec7\001\002\000\040\011\ufedd" +
+    "\013\ufec1\016\ufec1\155\ufedd\255\ufedd\335\ufedd\336\ufedd\337" +
+    "\ufedd\340\ufedd\341\ufedd\342\ufedd\343\ufedd\344\ufedd\345\ufedd" +
+    "\346\ufedd\001\002\000\006\013\ufebf\016\ufebf\001\002\000" +
+    "\010\013\ufec6\016\ufec6\017\ufec6\001\002\000\016\004\ufec2" +
+    "\005\ufec2\012\ufec2\141\ufec2\251\ufec2\336\ufec2\001\002\000" +
+    "\016\004\223\005\225\012\227\141\u0154\251\232\336\222" +
+    "\001\002\000\004\013\ufec3\001\002\000\020\004\ufec5\005" +
+    "\ufec5\012\ufec5\013\ufebc\141\ufec5\251\ufec5\336\ufec5\001\002" +
+    "\000\006\013\ufebe\016\ufebe\001\002\000\004\013\u0162\001" +
+    "\002\000\006\013\ufebd\016\ufebd\001\002\000\016\004\223" +
+    "\005\225\012\227\141\224\251\232\336\222\001\002\000" +
+    "\036\011\242\013\ufede\155\235\255\247\335\241\336\234" +
+    "\337\236\340\243\341\237\342\240\343\246\344\244\345" +
+    "\250\346\245\001\002\000\004\013\u0166\001\002\000\006" +
+    "\013\uff1b\016\uff1b\001\002\000\004\013\u0168\001\002\000" +
+    "\006\013\uff1a\016\uff1a\001\002\000\012\036\u0128\037\u012b" +
+    "\040\u0122\041\u0129\001\002\000\004\013\uff2c\001\002\000" +
+    "\010\013\uff31\016\uff31\210\uff31\001\002\000\010\130\uff19" +
+    "\131\uff19\141\uff19\001\002\000\012\036\uff38\037\uff38\040" +
+    "\uff38\041\uff38\001\002\000\012\036\uff32\037\uff32\040\uff32" +
+    "\041\uff32\001\002\000\012\036\uff30\037\uff30\040\uff30\041" +
+    "\uff30\001\002\000\004\013\u0171\001\002\000\010\013\uff2f" +
+    "\016\uff2f\210\uff2f\001\002\000\004\013\u0173\001\002\000" +
+    "\010\013\uff35\016\uff35\210\uff35\001\002\000\012\036\uff34" +
+    "\037\uff34\040\uff34\041\uff34\001\002\000\004\013\u0176\001" +
+    "\002\000\010\013\uff39\016\uff39\210\uff39\001\002\000\036" +
+    "\011\242\024\u0178\155\235\255\247\335\241\336\234\337" +
+    "\236\340\243\341\237\342\240\343\246\344\244\345\250" +
+    "\346\245\001\002\000\020\065\u011c\066\u0110\067\u010f\070" +
+    "\u0113\125\u011b\126\u0119\127\u010d\001\002\000\004\210\u017a" +
+    "\001\002\000\004\064\u017b\001\002\000\004\012\u017c\001" +
+    "\002\000\004\004\u017d\001\002\000\004\013\u017e\001\002" +
+    "\000\006\013\uff43\016\uff43\001\002\000\012\036\uff36\037" +
+    "\uff36\040\uff36\041\uff36\001\002\000\004\013\u0181\001\002" +
+    "\000\010\013\uff37\016\uff37\210\uff37\001\002\000\012\036" +
+    "\uff2e\037\uff2e\040\uff2e\041\uff2e\001\002\000\004\013\u0184" +
+    "\001\002\000\010\013\uff33\016\uff33\210\uff33\001\002\000" +
+    "\004\113\u0186\001\002\000\004\012\u0187\001\002\000\004" +
+    "\034\u0102\001\002\000\004\013\u0189\001\002\000\004\017" +
+    "\u018a\001\002\000\014\015\uff5a\212\uff5a\216\uff5a\307\uff5a" +
+    "\316\uff5a\001\002\000\014\015\uff50\212\uff50\216\uff50\307" +
+    "\uff50\316\uff50\001\002\000\004\123\u018d\001\002\000\004" +
+    "\012\u018e\001\002\000\006\013\u0190\034\u0102\001\002\000" +
+    "\004\013\u0192\001\002\000\004\017\u0191\001\002\000\014" +
+    "\015\uff51\212\uff51\216\uff51\307\uff51\316\uff51\001\002\000" +
+    "\004\017\u0193\001\002\000\014\015\uff52\212\uff52\216\uff52" +
+    "\307\uff52\316\uff52\001\002\000\004\020\u0195\001\002\000" +
+    "\026\104\u0198\107\u0199\110\u0197\111\u019a\112\u019d\113\u019f" +
+    "\114\u019b\122\u019c\123\u0196\124\u019e\001\002\000\006\017" +
+    "\uff4f\022\uff4f\001\002\000\006\017\uff63\022\uff63\001\002" +
+    "\000\006\017\uff6e\022\uff6e\001\002\000\006\017\uff67\022" +
+    "\uff67\001\002\000\004\022\uff5f\001\002\000\004\022\uff57" +
+    "\001\002\000\006\017\uff53\022\uff53\001\002\000\004\022" +
+    "\uff5b\001\002\000\006\017\uff4b\022\uff4b\001\002\000\004" +
+    "\022\uff59\001\002\000\004\141\u01a1\001\002\000\004\020" +
+    "\u01a2\001\002\000\004\106\u01a3\001\002\000\006\017\uff72" +
+    "\022\uff72\001\002\000\004\015\uff84\001\002\000\004\114" +
+    "\u01a6\001\002\000\004\012\u01a7\001\002\000\004\034\u0102" +
+    "\001\002\000\004\013\u01a9\001\002\000\004\017\u01aa\001" +
+    "\002\000\014\015\uff58\212\uff58\216\uff58\307\uff58\316\uff58" +
+    "\001\002\000\014\015\uff6d\212\uff6d\216\uff6d\307\uff6d\316" +
+    "\uff6d\001\002\000\004\105\u01ad\001\002\000\004\012\u01ae" +
+    "\001\002\000\004\013\u01af\001\002\000\004\017\u01b0\001" +
+    "\002\000\014\015\uff6c\212\uff6c\216\uff6c\307\uff6c\316\uff6c" +
+    "\001\002\000\014\015\uff6a\212\uff6a\216\uff6a\307\uff6a\316" +
+    "\uff6a\001\002\000\004\107\u01b3\001\002\000\004\012\u01b4" +
+    "\001\002\000\006\013\u01b6\034\u0102\001\002\000\004\013" +
+    "\u01b8\001\002\000\004\017\u01b7\001\002\000\014\015\uff69" +
+    "\212\uff69\216\uff69\307\uff69\316\uff69\001\002\000\004\017" +
+    "\u01b9\001\002\000\014\015\uff68\212\uff68\216\uff68\307\uff68" +
+    "\316\uff68\001\002\000\014\015\uff54\212\uff54\216\uff54\307" +
+    "\uff54\316\uff54\001\002\000\004\122\u01bc\001\002\000\004" +
+    "\012\u01bd\001\002\000\006\013\u01bf\034\u0102\001\002\000" +
+    "\004\013\u01c1\001\002\000\004\017\u01c0\001\002\000\014" +
+    "\015\uff55\212\uff55\216\uff55\307\uff55\316\uff55\001\002\000" +
+    "\004\017\u01c2\001\002\000\014\015\uff56\212\uff56\216\uff56" +
+    "\307\uff56\316\uff56\001\002\000\020\015\uff89\145\uff89\164" +
+    "\uff89\171\uff89\215\uff89\262\uff89\270\uff89\001\002\000\014" +
+    "\015\uff71\212\uff71\216\uff71\307\uff71\316\uff71\001\002\000" +
+    "\004\104\u01c6\001\002\000\004\012\u01c7\001\002\000\006" +
+    "\013\u01ca\033\u01c9\001\002\000\004\013\u01da\001\002\000" +
+    "\004\022\u01cc\001\002\000\004\017\u01cb\001\002\000\014" +
+    "\015\uff70\212\uff70\216\uff70\307\uff70\316\uff70\001\002\000" +
+    "\024\014\u01cd\065\uff41\066\uff41\067\uff41\070\uff41\125\uff41" +
+    "\126\uff41\127\uff41\230\uff41\001\002\000\006\012\u01cf\334" +
+    "\u01d0\001\002\000\004\013\uff47\001\002\000\024\013\u01d4" +
+    "\065\uff41\066\uff41\067\uff41\070\uff41\125\uff41\126\uff41\127" +
+    "\uff41\230\uff41\001\002\000\004\015\u01d1\001\002\000\004" +
+    "\013\uff49\001\002\000\004\013\u01d8\001\002\000\006\013" +
+    "\uff45\016\u01d6\001\002\000\004\015\u01d5\001\002\000\004" +
+    "\013\uff4a\001\002\000\022\065\uff41\066\uff41\067\uff41\070" +
+    "\uff41\125\uff41\126\uff41\127\uff41\230\uff41\001\002\000\004" +
+    "\013\uff44\001\002\000\004\015\u01d9\001\002\000\004\013" +
+    "\uff48\001\002\000\004\017\u01db\001\002\000\014\015\uff6f" +
+    "\212\uff6f\216\uff6f\307\uff6f\316\uff6f\001\002\000\004\145" +
+    "\u024b\001\002\000\004\014\u0227\001\002\000\004\141\u0222" +
+    "\001\002\000\004\014\u0203\001\002\000\004\313\u01e1\001" +
+    "\002\000\004\141\u01e2\001\002\000\006\014\u01e4\017\u01e3" +
+    "\001\002\000\014\015\uff06\212\uff06\216\uff06\307\uff06\316" +
+    "\uff06\001\002\000\004\164\u01e6\001\002\000\004\017\u0201" +
+    "\001\002\000\012\007\u01ef\137\u01ec\140\u01ed\141\u01ee\001" +
+    "\002\000\004\015\u01eb\001\002\000\004\017\ufee7\001\002" +
+    "\000\004\017\ufee8\001\002\000\004\017\ufee9\001\002\000" +
+    "\014\015\uff04\212\uff04\216\uff04\307\uff04\316\uff04\001\002" +
+    "\000\004\020\u01fd\001\002\000\004\020\u01f8\001\002\000" +
+    "\004\020\u01f4\001\002\000\004\020\u01f0\001\002\000\004" +
+    "\076\u01f1\001\002\000\004\022\u01f2\001\002\000\004\006" +
+    "\u01f3\001\002\000\004\017\ufee3\001\002\000\004\076\u01f5" +
+    "\001\002\000\004\022\u01f6\001\002\000\004\006\u01f7\001" +
+    "\002\000\004\017\ufee2\001\002\000\004\077\u01f9\001\002" +
+    "\000\004\022\u01fa\001\002\000\006\004\u01fc\010\u01fb\001" +
+    "\002\000\004\017\ufee5\001\002\000\004\017\ufee4\001\002" +
+    "\000\004\076\u01fe\001\002\000\004\022\u01ff\001\002\000" +
+    "\004\006\u0200\001\002\000\004\017\ufee6\001\002\000\006" +
+    "\015\ufeeb\164\u01e6\001\002\000\004\015\ufeea\001\002\000" +
+    "\006\015\u0205\221\u0206\001\002\000\004\015\u0221\001\002" +
+    "\000\004\313\uff01\001\002\000\004\045\u0207\001\002\000" +
+    "\004\017\u0208\001\002\000\004\313\u0209\001\002\000\010" +
+    "\046\u020b\145\u020e\160\u020f\001\002\000\004\015\ufefa\001" +
+    "\002\000\004\017\u0220\001\002\000\004\313\u021c\001\002" +
+    "\000\004\141\u0215\001\002\000\004\022\u0210\001\002\000" +
+    "\004\141\ufef5\001\002\000\004\141\u0211\001\002\000\004" +
+    "\012\u0151\001\002\000\004\017\u0213\001\002\000\004\313" +
+    "\ufef6\001\002\000\006\021\u021a\023\ufef4\001\002\000\012" +
+    "\013\uff10\016\uff10\021\uff10\023\uff10\001\002\000\004\023" +
+    "\u0217\001\002\000\016\004\223\005\225\012\227\141\u0147" +
+    "\251\232\336\222\001\002\000\004\017\u0219\001\002\000" +
+    "\004\313\ufef7\001\002\000\004\141\u021b\001\002\000\012" +
+    "\013\uff0f\016\uff0f\021\uff0f\023\uff0f\001\002\000\010\046" +
+    "\u021e\145\u020e\160\u020f\001\002\000\004\015\ufef8\001\002" +
+    "\000\004\017\u021f\001\002\000\004\015\ufef9\001\002\000" +
+    "\004\015\ufefb\001\002\000\004\313\uff00\001\002\000\006" +
+    "\014\u0224\017\u0223\001\002\000\014\015\uff07\212\uff07\216" +
+    "\uff07\307\uff07\316\uff07\001\002\000\004\164\u01e6\001\002" +
+    "\000\004\015\u0226\001\002\000\014\015\uff05\212\uff05\216" +
+    "\uff05\307\uff05\316\uff05\001\002\000\010\015\u022b\221\u022d" +
+    "\241\u0229\001\002\000\004\221\u022d\001\002\000\004\071" +
+    "\u0242\001\002\000\004\241\u0229\001\002\000\004\313\ufeff" +
+    "\001\002\000\004\015\u0240\001\002\000\004\045\u022e\001" +
+    "\002\000\004\017\u022f\001\002\000\004\313\u0230\001\002" +
+    "\000\006\046\u023e\160\u020f\001\002\000\004\313\u0233\001" +
+    "\002\000\006\015\ufeef\241\ufeef\001\002\000\006\046\u0235" +
+    "\160\u020f\001\002\000\006\015\ufeed\241\ufeed\001\002\000" +
+    "\004\017\u023d\001\002\000\004\141\u0215\001\002\000\006" +
+    "\021\u021a\023\u0238\001\002\000\004\071\u0239\001\002\000" +
+    "\004\021\u023a\001\002\000\004\141\u023b\001\002\000\004" +
+    "\017\u023c\001\002\000\004\313\ufeec\001\002\000\006\015" +
+    "\ufeee\241\ufeee\001\002\000\004\017\u023f\001\002\000\006" +
+    "\015\ufef0\241\ufef0\001\002\000\004\313\ufefe\001\002\000" +
+    "\004\015\ufef2\001\002\000\004\020\u0243\001\002\000\004" +
+    "\141\u0244\001\002\000\004\022\u0245\001\002\000\004\040" +
+    "\u0246\001\002\000\004\156\u0247\001\002\000\004\141\u0248" +
+    "\001\002\000\004\017\u0249\001\002\000\006\015\ufef1\221" +
+    "\ufef1\001\002\000\004\015\ufef3\001\002\000\004\020\u024c" +
+    "\001\002\000\006\117\u024d\120\u024e\001\002\000\004\014" +
+    "\ufefc\001\002\000\004\014\ufefd\001\002\000\014\015\uff66" +
+    "\212\uff66\216\uff66\307\uff66\316\uff66\001\002\000\004\110" +
+    "\u0251\001\002\000\004\012\u0252\001\002\000\006\013\u0254" +
+    "\034\u0102\001\002\000\004\013\u0256\001\002\000\004\017" +
+    "\u0255\001\002\000\014\015\uff65\212\uff65\216\uff65\307\uff65" +
+    "\316\uff65\001\002\000\004\017\u0257\001\002\000\014\015" +
+    "\uff64\212\uff64\216\uff64\307\uff64\316\uff64\001\002\000\004" +
+    "\111\u0259\001\002\000\004\012\u025a\001\002\000\006\034" +
+    "\u0102\035\u025b\001\002\000\004\022\u0268\001\002\000\004" +
+    "\016\u0264\001\002\000\006\013\u025f\016\u025e\001\002\000" +
+    "\004\034\u0102\001\002\000\004\017\u0260\001\002\000\014" +
+    "\015\uff60\212\uff60\216\uff60\307\uff60\316\uff60\001\002\000" +
+    "\004\013\u0262\001\002\000\004\017\u0263\001\002\000\014" +
+    "\015\uff62\212\uff62\216\uff62\307\uff62\316\uff62\001\002\000" +
+    "\004\035\u025b\001\002\000\004\013\u0266\001\002\000\004" +
+    "\017\u0267\001\002\000\014\015\uff61\212\uff61\216\uff61\307" +
+    "\uff61\316\uff61\001\002\000\004\072\u0269\001\002\000\004" +
+    "\012\u026a\001\002\000\006\042\u026b\043\u026d\001\002\000" +
+    "\004\022\u0278\001\002\000\004\016\u0275\001\002\000\004" +
+    "\022\uff11\001\002\000\004\016\u0272\001\002\000\004\022" +
+    "\u0270\001\002\000\004\141\u0215\001\002\000\010\013\uff12" +
+    "\016\uff12\021\u021a\001\002\000\004\042\u026b\001\002\000" +
+    "\004\013\u0274\001\002\000\006\013\uff0e\016\uff0e\001\002" +
+    "\000\004\043\u026d\001\002\000\004\013\u0277\001\002\000" +
+    "\006\013\uff0d\016\uff0d\001\002\000\004\073\u0279\001\002" +
+    "\000\004\012\u027b\001\002\000\006\013\uff0c\016\uff0c\001" +
+    "\002\000\016\004\223\005\225\012\227\141\224\251\232" +
+    "\336\222\001\002\000\036\011\242\016\u027d\155\235\255" +
+    "\247\335\241\336\234\337\236\340\243\341\237\342\240" +
+    "\343\246\344\244\345\250\346\245\001\002\000\016\004" +
+    "\223\005\225\012\227\141\224\251\232\336\222\001\002" +
+    "\000\036\011\242\013\u027f\155\235\255\247\335\241\336" +
+    "\234\337\236\340\243\341\237\342\240\343\246\344\244" +
+    "\345\250\346\245\001\002\000\006\013\uff0b\016\uff0b\001" +
+    "\002\000\014\015\uff75\212\uff75\216\uff75\307\uff75\316\uff75" +
+    "\001\002\000\004\106\u0282\001\002\000\004\012\u0283\001" +
+    "\002\000\006\013\u0285\034\u0102\001\002\000\004\013\u0287" +
+    "\001\002\000\004\017\u0286\001\002\000\014\015\uff74\212" +
+    "\uff74\216\uff74\307\uff74\316\uff74\001\002\000\004\017\u0288" +
+    "\001\002\000\014\015\uff73\212\uff73\216\uff73\307\uff73\316" +
+    "\uff73\001\002\000\004\112\u028a\001\002\000\004\012\u028b" +
+    "\001\002\000\006\034\u0102\035\u028c\001\002\000\004\022" +
+    "\u0299\001\002\000\006\013\u0294\016\u0293\001\002\000\004" +
+    "\016\u028f\001\002\000\004\035\u028c\001\002\000\004\013" +
+    "\u0291\001\002\000\004\017\u0292\001\002\000\014\015\uff5d" +
+    "\212\uff5d\216\uff5d\307\uff5d\316\uff5d\001\002\000\004\034" +
+    "\u0102\001\002\000\004\017\u0295\001\002\000\014\015\uff5e" +
+    "\212\uff5e\216\uff5e\307\uff5e\316\uff5e\001\002\000\004\013" +
+    "\u0297\001\002\000\004\017\u0298\001\002\000\014\015\uff5c" +
+    "\212\uff5c\216\uff5c\307\uff5c\316\uff5c\001\002\000\004\072" +
+    "\u029a\001\002\000\004\012\u029b\001\002\000\006\042\u029c" +
+    "\043\u026d\001\002\000\004\022\u02a5\001\002\000\004\016" +
+    "\u02a2\001\002\000\004\016\u029f\001\002\000\004\043\u026d" +
+    "\001\002\000\004\013\u02a1\001\002\000\006\013\uff09\016" +
+    "\uff09\001\002\000\004\042\u029c\001\002\000\004\013\u02a4" +
+    "\001\002\000\006\013\uff0a\016\uff0a\001\002\000\004\141" +
+    "\u02a6\001\002\000\004\021\u02a7\001\002\000\004\044\u02a8" +
+    "\001\002\000\004\012\u02a9\001\002\000\004\013\u02aa\001" +
+    "\002\000\006\013\uff08\016\uff08\001\002\000\004\141\u02ac" +
+    "\001\002\000\004\020\u02ad\001\002\000\004\105\u02ae\001" +
+    "\002\000\006\017\uff6b\022\uff6b\001\002\000\004\020\u02b0" +
+    "\001\002\000\004\102\u02b1\001\002\000\006\014\uff95\017" +
+    "\uff95\001\002\000\026\015\uffaa\145\uffaa\164\uffaa\166\uffaa" +
+    "\171\uffaa\215\uffaa\262\uffaa\265\uffaa\267\uffaa\270\uffaa\001" +
+    "\002\000\026\015\uffa9\145\uffa9\164\uffa9\166\uffa9\171\uffa9" +
+    "\215\uffa9\262\uffa9\265\uffa9\267\uffa9\270\uffa9\001\002\000" +
+    "\010\015\u02b8\164\277\301\u02b6\001\002\000\004\015\u02be" +
+    "\001\002\000\004\020\u02bb\001\002\000\010\015\uff91\164" +
+    "\277\301\u02b6\001\002\000\020\015\uff94\145\uff94\164\uff94" +
+    "\171\uff94\215\uff94\262\uff94\270\uff94\001\002\000\010\015" +
+    "\uff8f\164\uff8f\301\uff8f\001\002\000\004\015\uff90\001\002" +
+    "\000\010\074\320\075\317\141\316\001\002\000\004\017" +
+    "\u02bd\001\002\000\010\015\uff8e\164\uff8e\301\uff8e\001\002" +
+    "\000\020\015\uff93\145\uff93\164\uff93\171\uff93\215\uff93\262" +
+    "\uff93\270\uff93\001\002\000\004\020\u02c0\001\002\000\004" +
+    "\103\u02c1\001\002\000\004\014\uff92\001\002\000\004\023" +
+    "\u02c7\001\002\000\020\015\uffa1\145\uffa1\164\uffa1\171\uffa1" +
+    "\215\uffa1\262\uffa1\270\uffa1\001\002\000\016\004\223\005" +
+    "\225\012\227\141\224\251\232\336\222\001\002\000\036" +
+    "\011\242\017\u02c6\155\235\255\247\335\241\336\234\337" +
+    "\236\340\243\341\237\342\240\343\246\344\244\345\250" +
+    "\346\245\001\002\000\020\015\uffa0\145\uffa0\164\uffa0\171" +
+    "\uffa0\215\uffa0\262\uffa0\270\uffa0\001\002\000\016\004\223" +
+    "\005\225\012\227\141\224\251\232\336\222\001\002\000" +
+    "\036\011\242\017\u02c9\155\235\255\247\335\241\336\234" +
+    "\337\236\340\243\341\237\342\240\343\246\344\244\345" +
+    "\250\346\245\001\002\000\020\015\uff9f\145\uff9f\164\uff9f" +
+    "\171\uff9f\215\uff9f\262\uff9f\270\uff9f\001\002\000\004\020" +
+    "\u02cb\001\002\000\010\074\320\075\317\141\316\001\002" +
+    "\000\010\017\uff9e\023\uff9e\202\uff9e\001\002\000\004\141" +
+    "\u02ce\001\002\000\004\020\u02cf\001\002\000\010\074\320" +
+    "\075\317\141\316\001\002\000\006\017\uff9b\023\uff9b\001" +
+    "\002\000\004\121\u02d2\001\002\000\004\020\u02d3\001\002" +
+    "\000\004\116\u02d4\001\002\000\006\014\uff86\017\uff86\001" +
+    "\002\000\006\062\u02d7\063\u02d6\001\002\000\004\165\u02e4" +
+    "\001\002\000\004\165\u02d8\001\002\000\004\141\u02d9\001" +
+    "\002\000\006\021\u02da\022\u02db\001\002\000\004\141\u02e0" +
+    "\001\002\000\004\141\u02dc\001\002\000\004\021\u02dd\001" +
+    "\002\000\004\141\u02de\001\002\000\004\017\u02df\001\002" +
+    "\000\016\015\uffc1\164\uffc1\166\uffc1\262\uffc1\265\uffc1\267" +
+    "\uffc1\001\002\000\004\022\u02e1\001\002\000\004\141\u02e2" +
+    "\001\002\000\004\017\u02e3\001\002\000\016\015\uffc2\164" +
+    "\uffc2\166\uffc2\262\uffc2\265\uffc2\267\uffc2\001\002\000\004" +
+    "\141\u02e5\001\002\000\006\021\u02e6\022\u02e7\001\002\000" +
+    "\004\141\u02ec\001\002\000\004\141\u02e8\001\002\000\004" +
+    "\021\u02e9\001\002\000\004\141\u02ea\001\002\000\004\017" +
+    "\u02eb\001\002\000\016\015\uffbf\164\uffbf\166\uffbf\262\uffbf" +
+    "\265\uffbf\267\uffbf\001\002\000\004\022\u02ed\001\002\000" +
+    "\004\141\u02ee\001\002\000\004\017\u02ef\001\002\000\016" +
+    "\015\uffc0\164\uffc0\166\uffc0\262\uffc0\265\uffc0\267\uffc0\001" +
+    "\002\000\006\015\u02f2\164\277\001\002\000\004\015\u02f3" +
+    "\001\002\000\016\015\uffe8\164\uffe8\166\uffe8\262\uffe8\265" +
+    "\uffe8\267\uffe8\001\002\000\016\015\uffe9\164\uffe9\166\uffe9" +
+    "\262\uffe9\265\uffe9\267\uffe9\001\002\000\004\265\u02f7\001" +
+    "\002\000\016\015\uffbc\164\uffbc\166\uffbc\262\uffbc\265\uffbc" +
+    "\267\uffbc\001\002\000\006\015\u0303\164\277\001\002\000" +
+    "\004\262\u02f8\001\002\000\004\041\u02f9\001\002\000\006" +
+    "\020\u02fb\022\u02fa\001\002\000\004\141\u0300\001\002\000" +
+    "\004\055\u02fc\001\002\000\004\022\u02fd\001\002\000\004" +
+    "\141\u02fe\001\002\000\004\017\u02ff\001\002\000\006\015" +
+    "\uffb7\164\uffb7\001\002\000\004\017\u0301\001\002\000\006" +
+    "\015\uffb6\164\uffb6\001\002\000\004\015\u0304\001\002\000" +
+    "\016\015\uffba\164\uffba\166\uffba\262\uffba\265\uffba\267\uffba" +
+    "\001\002\000\016\015\uffb9\164\uffb9\166\uffb9\262\uffb9\265" +
+    "\uffb9\267\uffb9\001\002\000\004\015\u0306\001\002\000\016" +
+    "\015\uffb8\164\uffb8\166\uffb8\262\uffb8\265\uffb8\267\uffb8\001" +
+    "\002\000\016\015\uffb5\164\uffb5\166\uffb5\262\uffb5\265\uffb5" +
+    "\267\uffb5\001\002\000\006\015\u030b\164\u0309\001\002\000" +
+    "\004\141\u030f\001\002\000\016\015\uffb3\164\uffb3\166\uffb3" +
+    "\262\uffb3\265\uffb3\267\uffb3\001\002\000\016\015\uffb4\164" +
+    "\uffb4\166\uffb4\262\uffb4\265\uffb4\267\uffb4\001\002\000\006" +
+    "\015\u030e\164\u0309\001\002\000\016\015\uffaf\164\uffaf\166" +
+    "\uffaf\262\uffaf\265\uffaf\267\uffaf\001\002\000\016\015\uffb0" +
+    "\164\uffb0\166\uffb0\262\uffb0\265\uffb0\267\uffb0\001\002\000" +
+    "\004\271\u0310\001\002\000\004\141\u0311\001\002\000\004" +
+    "\017\u0312\001\002\000\006\015\uffae\164\uffae\001\002\000" +
+    "\006\013\uffd2\016\uffd2\001\002\000\004\022\u032b\001\002" +
+    "\000\004\022\u0329\001\002\000\006\013\uffd3\016\uffd3\001" +
+    "\002\000\004\013\u0327\001\002\000\006\013\uffd0\016\uffd0" +
+    "\001\002\000\006\013\uffd6\016\u0325\001\002\000\006\013" +
+    "\uffd1\016\uffd1\001\002\000\004\022\u0323\001\002\000\004" +
+    "\022\u0321\001\002\000\006\013\uffd4\016\uffd4\001\002\000" +
+    "\004\022\u031f\001\002\000\004\004\u0320\001\002\000\006" +
+    "\013\uffcc\016\uffcc\001\002\000\004\141\u0322\001\002\000" +
+    "\006\013\uffcf\016\uffcf\001\002\000\004\005\u0324\001\002" +
+    "\000\006\013\uffcb\016\uffcb\001\002\000\014\025\u031b\026" +
+    "\u031e\027\u0315\031\u031c\032\u0314\001\002\000\004\013\uffd5" +
+    "\001\002\000\004\017\u0328\001\002\000\016\015\uffdc\164" +
+    "\uffdc\166\uffdc\262\uffdc\265\uffdc\267\uffdc\001\002\000\004" +
+    "\005\u032a\001\002\000\006\013\uffcd\016\uffcd\001\002\000" +
+    "\004\141\u032c\001\002\000\006\013\uffce\016\uffce\001\002" +
+    "\000\016\015\ufffb\164\ufffb\166\ufffb\262\ufffb\265\ufffb\267" +
+    "\ufffb\001\002\000\004\013\u032f\001\002\000\004\017\u0330" +
+    "\001\002\000\016\015\uffd8\164\uffd8\166\uffd8\262\uffd8\265" +
+    "\uffd8\267\uffd8\001\002\000\004\015\ufffd\001\002\000\004" +
+    "\141\u0333\001\002\000\006\305\137\333\141\001\002\000" +
+    "\004\100\u0335\001\002\000\004\014\uffe7\001\002\000\004" +
+    "\013\u0337\001\002\000\004\017\u0338\001\002\000\016\015" +
+    "\uffda\164\uffda\166\uffda\262\uffda\265\uffda\267\uffda\001\002" +
+    "\000\016\015\ufffc\164\ufffc\166\ufffc\262\ufffc\265\ufffc\267" +
+    "\ufffc\001\002\000\004\002\000\001\002" });
+
+  /** Access to parse-action table. */
+  @Override
+  public short[][] action_table() {return _action_table;}
+
+  /** <code>reduce_goto</code> table. */
+  protected static final short[][] _reduce_table = 
+    unpackFromStrings(new String[] {
+    "\000\u0338\000\004\004\003\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\066\005\042\006\020" +
+    "\011\007\013\035\014\037\017\023\020\044\021\012\022" +
+    "\011\032\032\033\015\034\021\035\045\036\025\037\022" +
+    "\040\027\041\010\042\016\043\026\044\034\045\014\046" +
+    "\031\053\036\054\033\055\043\056\041\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\020\023\u0335" +
+    "\024\u0318\025\u031c\026\u0315\027\u0312\030\u0319\031\u0317\001" +
+    "\001\000\002\001\001\000\002\001\001\000\066\005\u0330" +
+    "\006\020\011\007\013\035\014\037\017\023\020\044\021" +
+    "\012\022\011\032\032\033\015\034\021\035\045\036\025" +
+    "\037\022\040\027\041\010\042\016\043\026\044\034\045" +
+    "\014\046\031\053\036\054\033\055\043\056\041\001\001" +
+    "\000\020\023\u032d\024\u0318\025\u031c\026\u0315\027\u0312\030" +
+    "\u0319\031\u0317\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\020" +
+    "\023\u0316\024\u0318\025\u031c\026\u0315\027\u0312\030\u0319\031" +
+    "\u0317\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\014\015\u02f3\016\300\047\u02f4\050\u02f5\101" +
+    "\301\001\001\000\002\001\001\000\002\001\001\000\044" +
+    "\055\177\056\041\057\167\060\165\061\175\062\161\063" +
+    "\160\064\166\065\170\066\152\071\172\072\157\073\154" +
+    "\076\174\077\164\100\176\171\173\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
+    "\010\102\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\004\012" +
+    "\106\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\004\012" +
+    "\111\001\001\000\002\001\001\000\004\012\113\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\004\007\137\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\044\055\177\056\041\057\u02b2\060\165\061\175" +
+    "\062\161\063\160\064\166\065\170\066\152\071\172\072" +
+    "\157\073\154\076\174\077\164\100\176\171\173\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\010\233\227\234\230\235\225\001\001\000\010\233" +
+    "\272\234\230\235\225\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\010\233" +
+    "\266\234\230\235\225\001\001\000\002\001\001\000\002" +
+    "\001\001\000\010\233\232\234\230\235\225\001\001\000" +
+    "\002\001\001\000\010\233\264\234\230\235\225\001\001" +
+    "\000\010\233\263\234\230\235\225\001\001\000\010\233" +
+    "\262\234\230\235\225\001\001\000\010\233\261\234\230" +
+    "\235\225\001\001\000\010\233\260\234\230\235\225\001" +
+    "\001\000\010\233\257\234\230\235\225\001\001\000\010" +
+    "\233\256\234\230\235\225\001\001\000\010\233\255\234" +
+    "\230\235\225\001\001\000\010\233\254\234\230\235\225" +
+    "\001\001\000\010\233\253\234\230\235\225\001\001\000" +
+    "\010\233\252\234\230\235\225\001\001\000\010\233\251" +
+    "\234\230\235\225\001\001\000\010\233\250\234\230\235" +
+    "\225\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\004\235\271\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\010\015\275\016\300" +
+    "\101\301\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\010\015\311\016\300\101\301\001\001" +
+    "\000\004\102\304\001\001\000\002\001\001\000\010\233" +
+    "\306\234\230\235\225\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\010\233\310\234\230\235" +
+    "\225\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\004\002\314\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\074\074\344\075\351\103" +
+    "\333\104\330\105\337\106\336\107\356\110\354\111\325" +
+    "\112\363\113\353\114\340\115\335\116\326\117\342\155" +
+    "\327\156\341\157\347\160\346\161\332\162\331\163\324" +
+    "\164\361\165\350\166\345\167\360\170\362\200\357\205" +
+    "\334\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\010\201\u01df\214\u01de\215\u01dc\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\074\074\u01a3\075\351\103" +
+    "\333\104\330\105\337\106\336\107\356\110\354\111\325" +
+    "\112\363\113\353\114\340\115\335\116\326\117\342\155" +
+    "\327\156\341\157\347\160\346\161\332\162\331\163\324" +
+    "\164\361\165\350\166\345\167\360\170\362\200\357\205" +
+    "\334\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\004\121\u0102\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\006\123\u0108\227\u0109\001\001\000" +
+    "\002\001\001\000\034\124\u0116\125\u0119\130\u011d\131\u010a" +
+    "\132\u0113\133\u0117\134\u011c\147\u0111\150\u010d\151\u0114\152" +
+    "\u010b\153\u011e\154\u0115\001\001\000\002\001\001\000\030" +
+    "\126\u0182\127\u0124\135\u0122\136\u011f\142\u0126\143\u012d\144" +
+    "\u0120\145\u012b\146\u0129\172\u0125\226\u012c\001\001\000\002" +
+    "\001\001\000\030\126\u017f\127\u0124\135\u0122\136\u011f\142" +
+    "\u0126\143\u012d\144\u0120\145\u012b\146\u0129\172\u0125\226\u012c" +
+    "\001\001\000\002\001\001\000\002\001\001\000\010\233" +
+    "\u0176\234\230\235\225\001\001\000\030\126\u0174\127\u0124" +
+    "\135\u0122\136\u011f\142\u0126\143\u012d\144\u0120\145\u012b\146" +
+    "\u0129\172\u0125\226\u012c\001\001\000\002\001\001\000\002" +
+    "\001\001\000\030\126\u0171\127\u0124\135\u0122\136\u011f\142" +
+    "\u0126\143\u012d\144\u0120\145\u012b\146\u0129\172\u0125\226\u012c" +
+    "\001\001\000\030\126\u016f\127\u0124\135\u0122\136\u011f\142" +
+    "\u0126\143\u012d\144\u0120\145\u012b\146\u0129\172\u0125\226\u012c" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\030\126\u0123\127" +
+    "\u0124\135\u0122\136\u011f\142\u0126\143\u012d\144\u0120\145\u012b" +
+    "\146\u0129\172\u0125\226\u012c\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\014\137\u012f\141\u0131\233\u0132\234\230" +
+    "\235\225\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\010\233\u0134\234\230" +
+    "\235\225\001\001\000\002\001\001\000\010\233\u0136\234" +
+    "\230\235\225\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\020\204\u0148\230\u0144\232\u014c" +
+    "\233\u0149\234\u014b\235\u0147\236\u0145\001\001\000\002\001" +
+    "\001\000\022\233\u0149\234\u0158\235\u0155\236\u0151\237\u0154" +
+    "\241\u0159\242\u0152\243\u0156\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\016\230" +
+    "\u014f\232\u014c\233\u0149\234\u014b\235\u0147\236\u0145\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\022\233\u0149\234\u0158\235\u0155\236\u0151\237\u0154\241\u0159" +
+    "\242\u0152\243\u0160\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\240\u015c\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\022\233\u0149" +
+    "\234\u0158\235\u0155\236\u0151\237\u0154\241\u0159\242\u0152\243" +
+    "\u015d\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\012\231" +
+    "\u0164\233\u0163\234\230\235\225\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\030\126\u0169\127\u0124\135\u0122\136\u011f" +
+    "\142\u0126\143\u012d\144\u0120\145\u012b\146\u0129\172\u0125\226" +
+    "\u012c\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\034\124\u0178\125\u0119" +
+    "\130\u011d\131\u010a\132\u0113\133\u0117\134\u011c\147\u0111\150" +
+    "\u010d\151\u0114\152\u010b\153\u011e\154\u0115\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\004\121\u0187\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\004\121\u018e\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\004\121\u01a7\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\004\121\u01b4\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\004\121\u01bd\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\004\120\u01c7\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\006\123\u01cd\227\u0109\001\001\000" +
+    "\002\001\001\000\002\001\001\000\010\122\u01d1\123\u01d2" +
+    "\227\u0109\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\010\122\u01d6\123\u01d2\227\u0109\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\014\206\u01e6\222\u01e4\223\u01e9\224\u01e8\225\u01e7\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\014\206\u0201\222" +
+    "\u01e4\223\u01e9\224\u01e8\225\u01e7\001\001\000\002\001\001" +
+    "\000\004\207\u0203\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\202\u0209" +
+    "\001\001\000\006\203\u020b\211\u020c\001\001\000\002\001" +
+    "\001\000\002\001\001\000\004\202\u021c\001\001\000\006" +
+    "\003\u0215\213\u0213\001\001\000\002\001\001\000\002\001" +
+    "\001\000\006\232\u0211\236\u0145\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\016\230\u0217\232\u014c" +
+    "\233\u0149\234\u014b\235\u0147\236\u0145\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\006\203\u020b\211\u020c\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\014\206" +
+    "\u0224\222\u01e4\223\u01e9\224\u01e8\225\u01e7\001\001\000\002" +
+    "\001\001\000\002\001\001\000\010\210\u022b\216\u0227\217" +
+    "\u0229\001\001\000\004\217\u0249\001\001\000\002\001\001" +
+    "\000\004\216\u0240\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\006\220\u0231" +
+    "\221\u0230\001\001\000\004\211\u0235\001\001\000\006\220" +
+    "\u0233\221\u0230\001\001\000\002\001\001\000\004\211\u0235" +
+    "\001\001\000\002\001\001\000\002\001\001\000\004\213" +
+    "\u0236\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\004\121\u0252\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\006\121\u025b\173\u025c\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\121\u0260" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\173\u0264" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\010\174\u026d" +
+    "\175\u026b\212\u026e\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\004\213\u0270\001\001\000\002\001\001\000\004\175" +
+    "\u0272\001\001\000\002\001\001\000\002\001\001\000\006" +
+    "\174\u0275\212\u026e\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\140\u0279\001\001\000\002\001\001\000\002" +
+    "\001\001\000\010\233\u027b\234\230\235\225\001\001\000" +
+    "\002\001\001\000\010\233\u027d\234\230\235\225\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\004\121\u0283\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\006\121\u028d\176\u028c\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\176\u028f" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\121\u0295\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\010\174\u029c" +
+    "\177\u029d\212\u026e\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\006\174\u029f\212\u026e\001\001" +
+    "\000\002\001\001\000\002\001\001\000\004\177\u02a2\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\012\016\u02b8\067\u02b4\070\u02b6\101" +
+    "\301\001\001\000\002\001\001\000\002\001\001\000\012" +
+    "\016\u02b8\067\u02b9\070\u02b6\101\301\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\002\u02bb" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\010\233\u02c4\234" +
+    "\230\235\225\001\001\000\002\001\001\000\002\001\001" +
+    "\000\010\233\u02c7\234\230\235\225\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\002\u02cb" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\002\u02cf\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\010\015\u02f0\016\300\101\301" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\050\u0304\001\001\000\002\001\001\000\010" +
+    "\015\u0301\016\300\101\301\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\006" +
+    "\051\u0309\052\u030b\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\006\051\u030c\052\u030b\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\020\023\u0325\024\u0318\025\u031c" +
+    "\026\u0315\027\u0312\030\u0319\031\u0317\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\004\007" +
+    "\u0333\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001" });
+
+  /** Access to <code>reduce_goto</code> table. */
+  @Override
+  public short[][] reduce_table() {return _reduce_table;}
+
+  /** Instance of action encapsulation class. */
+  protected CUP$AvatarFromSysMLParser$actions action_obj;
+
+  /** Action encapsulation object initializer. */
+  @Override
+  protected void init_actions()
+    {
+      action_obj = new CUP$AvatarFromSysMLParser$actions(this);
+    }
+
+  /** Invoke a user supplied parse action. */
+  @Override
+  public java_cup.runtime.Symbol do_action(
+    int                        act_num,
+    java_cup.runtime.lr_parser parser,
+    java.util.Stack<java_cup.runtime.Symbol>    stack,
+    int                        top)
+    throws java.lang.Exception
+  {
+    /* call code in generated class */
+    return action_obj.CUP$AvatarFromSysMLParser$do_action(act_num, parser, stack, top);
+  }
+
+  /** Indicates start state. */
+  @Override
+  public int start_state() {return 0;}
+  /** Indicates start production. */
+  @Override
+  public int start_production() {return 1;}
+
+  /** <code>EOF</code> Symbol index. */
+  @Override
+  public int EOF_sym() {return 0;}
+
+  /** <code>error</code> Symbol index. */
+  @Override
+  public int error_sym() {return 1;}
+
+
+
+    // %%%%%%%%%%%%%%%%%%% BEGINNING OF USER CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    /** Parse the current buffer and returns the abstract syntax tree (AST) of the described specification.
+     *
+     * <p> At the end of parsing, the true AST components are in variables dataTypeMap, relationMap, channelMap,
+     * blockMap and signalMap. The invoked AST constructor (StxModel) also receives some other parameters: the
+     * list of errors encountered while parsing and some information it uses in a post-processing that finalizes
+     * the AST structure (complete some fields).
+     */
+
+    // %%%%%%%%%%%%%%%%%%%%%%%%%%% MAIN FUNCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    public StxModel parseModel() {
+        try {
+            parse();
+            return new StxModel(errors,dataTypeMap,relationMap,channelMap,blockMap,signalMap,outMessageMap,commTransitions);
+        }
+        catch (java.lang.Exception e) {
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, lexer.getErrorLocation(), e.getMessage()));
+            return new StxModel(errors,dataTypeMap,relationMap,channelMap,blockMap,signalMap,outMessageMap,commTransitions);
+        }
+    }
+
+    // %%%%%%%%%%%%%%%%%%%%%%%%%%% IMPLEMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    // %%%%%%%%%%%%% LEXER
+
+    /** to make lexer access easier */
+    private AvatarFromSysMLLexer lexer = (AvatarFromSysMLLexer) getScanner();
+
+    // %%%%%%%%%%%%%% ERROR HANDLING
+
+    /** to handle errors encountered while parsing */
+    private ArrayList<AvatarFromSysMLError> errors;
+    /** register an error */
+    private void addError(AvatarFromSysMLError _err) { errors.add(_err); }
+    /** get encountered errors */
+    public ArrayList<AvatarFromSysMLError> getErrors() { return errors; }
+
+    // %%%%%%%%%%%%%%%%%% INITIALIZE
+
+    @Override
+    public void user_init() {
+        errors = new ArrayList<AvatarFromSysMLError>();
+        dataTypeMap = new HashMap<String,StxDataType>();
+        relationMap = new HashMap<String,StxRelation>();
+        channelMap = new HashMap<String,StxChannel>();
+        blockMap = new HashMap<String,StxBlock>();
+        signalMap = new HashMap<String,StxSignal>();
+        inMessageMap = new HashMap<String,StxInMessage>();
+        outMessageMap = new HashMap<String,StxOutMessage>();
+        blockHierarchy = new ArrayList<StxBlock>();
+        attributeHierarchy = new ArrayList<HashMap<String,StxAttribute>>();
+        methodHierarchy = new ArrayList<HashMap<String,StxMethod>>();
+        commTransitions = new ArrayList<StxTransition>();
+        theBlock = null;
+    }
+
+    // %%%%%%%%%%%%%%%%% GLOBAL STRUCTURES FILLED BY PARSING
+
+    /** datatypes collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxDataType> dataTypeMap;
+    /** relations collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxRelation> relationMap;
+    /** channels collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxChannel> channelMap;
+    /** blocks collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxBlock> blockMap;
+    /** signals collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxSignal> signalMap;
+
+    /** signal input profiles collected from SysML source while parsing, internal, technical */
+    private HashMap<String,StxInMessage> inMessageMap; // theStructure
+    /** signal outout profiles collected from SysML source while parsing, to finalize final AST */
+    private HashMap<String,StxOutMessage> outMessageMap;
+
+    /** communication transitions, to finalize final AST. They are collected while parsing as they
+     * require a post-processing after it, when their containing block hierarchy is fully known,
+     * to find their associated signal from its name.
+     */
+    ArrayList<StxTransition> commTransitions;
+
+    /** attributes, one map per block. Technical variable: memorize to avoid duplicates */
+    private HashMap<String,StxAttribute> attributeMap;
+
+    /** methods, one map per block. Technical variable: memorize to avoid duplicates */
+    private HashMap<String,StxMethod> methodMap;
+
+    private StringBuffer stringAcc = new StringBuffer();
+
+    // %%%%%%%%%%%%%%%%%%%% "PATH" STATE VARIABLES
+    // context information for parsing
+    // they locate the current position being parsed in the specification structure
+
+    /** path state variable: current field */
+    private StxField theField;
+    /** path state variable: current input profile or method */
+    private StxStructure theStructure;
+    /** path state variable: current relation */
+    private StxRelation theRelation;
+    /** path state variable: current Channel */
+    private StxChannel theChannel;
+    /** path state variable: current block */
+    private StxBlock theBlock;
+    /** path state variable: current signal */
+    private StxSignal theSignal;
+    /** path state variable: current output profile */
+    private StxOutMessage theOutMessage;
+    /** path state variable: current attribute */
+    private StxAttribute theAttribute;
+    /** path state variable: current state */
+    private StxState theState;
+    /** path state variable: current transition */
+    private StxTransition theTransition;
+    /** path state variable: transition request index
+     *  Idea: thState->transition(requestIndex) correspond to theTransition
+     */
+    private int requestIndex;
+
+    /** current path in block hierarchy, ancestors in order: last element is father of current block. */
+    private ArrayList<StxBlock> blockHierarchy;
+    /** attributes associated to ancestor blocks, respects blockHierarchy order */
+    private ArrayList<HashMap<String,StxAttribute>> attributeHierarchy;
+    /** methods associated to ancestor blocks, respects blockHierarchy order */
+    private ArrayList<HashMap<String,StxMethod>> methodHierarchy;
+    /** to detect multiple state machines in a single block */
+    private Location stateMachine = null;
+    /** state machine flags associated to ancestor blocks, respects blockHierarchy order */
+    private ArrayList<Location> machineHierarchy = new ArrayList<Location>();
+
+    // %%%%%%%%%%%%%%%%%%%% UPDATE PATH STATE VARIABLES
+
+    // ++++++++++++++++ RELATIONS
+
+    /** set current relation. Create-and-Register it if necessary. */
+    private void getRelation(String _name) {
+        theRelation = relationMap.get(_name);
+        if (theRelation == null) {
+            theRelation = new StxRelation(_name);
+            relationMap.put(_name, theRelation);
+        }
+    }
+
+    /** (to avoid duplicates) not null if a block1 parameter has been encountered for current relation */
+    private Location block1ParamFlag;
+    /** (to avoid duplicates) not null if a block2 parameter has been encountered for current relation */
+    private Location block2ParamFlag;
+    /** (to avoid duplicates) not null if a private parameter has been encountered for current relation */
+    private Location privateParamFlag;
+    /** (to avoid duplicates) not null if a maxsize parameter has been encountered for current relation */
+    private Location maxsizeParamFlag;
+    /** (to avoid duplicates) not null if a lossy parameter has been encountered for current relation */
+    private Location lossyParamFlag;
+
+    /** to clear the relevant anti-duplicate flags (locations) at the beginning of a relation parsing */
+    private void clearRelationParams() {
+        block1ParamFlag = null;
+        block2ParamFlag = null;
+        privateParamFlag = null;
+        maxsizeParamFlag = null;
+        lossyParamFlag = null;
+    }
+
+    // ++++++++++++++++ CHANNELS
+
+    /** set current channel. Create-and-Register it if necessary. */
+    private void getChannel(String _name) {
+        theChannel = channelMap.get(_name);
+        if (theChannel == null) {
+            theChannel = new StxChannel(_name);
+            channelMap.put(_name, theChannel);
+        }
+    }
+
+    // ++++++++++++++++ BLOCKS
+
+    /** set current block. Create-and-Register it if necessary. */
+    private void getBlock(String _name) {
+        theBlock = blockMap.get(_name);
+        if (theBlock == null) {
+            theBlock = new StxBlock(_name);
+            blockMap.put(_name, theBlock);
+        }
+    }
+
+    // ++++++++++++++++ SIGNALS
+
+    /** set current signal. Create-and-Register it if necessary. */
+    private void getSignal(String _blockname, String _signalname) {
+        String key = _blockname + "." + _signalname;
+        theSignal = signalMap.get(key);
+        if (theSignal == null) {
+            theSignal = new StxSignal(_signalname);
+            signalMap.put(key, theSignal);
+        }
+    }
+
+    // ++++++++++++++++ INPUT PROFILE
+
+    /** (to avoid duplicates) not null if a message channel parameter has been encountered for current relation */
+    private Location messageChannelParam;
+
+    /** set current in message in theStructure. Create-and-Register it if necessary. */
+    private void getInMessage(String _name) {
+        theStructure = inMessageMap.get(_name);
+        if (theStructure == null) {
+            theStructure = new StxInMessage(_name);
+            inMessageMap.put(_name, (StxInMessage)theStructure);
+        }
+    }
+
+    // ++++++++++++++++ OUTPUT PROFILE
+
+    /** set current out message. Create-and-Register it if necessary. */
+    private void getOutMessage(String _name, StxInMessage _msg) {
+        theOutMessage = outMessageMap.get(_name);
+        if (theOutMessage == null) {
+            theOutMessage = new StxOutMessage(_name, _msg);
+            outMessageMap.put(_name, theOutMessage);
+        }
+    }
+
+    // ++++++++++++++++ ENTER / EXIT BLOCK
+
+    /** enter block: extend path to current block (push blockHierarchy, attributeHierarchy, methodHierarchy) */
+    private void pushBlock() {
+        blockHierarchy.add(theBlock);
+        theBlock = null;
+        attributeHierarchy.add(attributeMap);
+        attributeMap = new HashMap<String,StxAttribute>();
+        methodHierarchy.add(methodMap);
+        methodMap = new HashMap<String,StxMethod>();
+        machineHierarchy.add(stateMachine);
+        stateMachine = null;
+    }
+
+    /** exit block: shorten path to current block (pop blockHierarchy, attributeHierarchy, methodHierarchy) */
+    private void popBlock() {
+        theBlock = blockHierarchy.get(blockHierarchy.size() -1);
+        blockHierarchy.remove(blockHierarchy.size() -1);
+        attributeMap = attributeHierarchy.get(attributeHierarchy.size() -1);
+        attributeHierarchy.remove(attributeHierarchy.size() -1);
+        methodMap = methodHierarchy.get(methodHierarchy.size() -1);
+        methodHierarchy.remove(methodHierarchy.size() -1);
+        stateMachine = machineHierarchy.remove(machineHierarchy.size() -1);
+    }
+
+
+
+    /** set current attribute. Create-and-Register it if necessary. */
+    private void getAttribute(String _name, String _type) {
+        theAttribute = attributeMap.get(_name);
+        if (theAttribute == null) {
+            theAttribute = new StxAttribute(_name, _type);
+            attributeMap.put(_name, theAttribute);
+        }
+    }
+
+    /** set current method. Create-and-Register it if necessary. */
+    private void getMethod(String _name) {
+        theStructure = new StxMethod(_name);
+        if (theStructure == null) {
+            theStructure = new StxMethod(_name);
+            methodMap.put(_name, (StxMethod)theStructure);
+        }
+    }
+
+    /** set current state. Create-and-Register it if necessary. */
+    private HashMap<String,StxState> stateMap;
+    private void getState(String _name) {
+        theState = stateMap.get(_name);
+        if (theState == null) {
+            theState = new StxState(_name);
+            stateMap.put(_name, theState);
+        }
+    }
+
+    /** set current transition. Create and register it with current state if necessary */
+    private void getTransition(int _index) {
+        theTransition = theState.getTransition(_index);
+    }
+
+    /** (to avoid duplicates) not null if an index parameter has been encountered for current request */
+    private Location indexArg;
+    /** (to avoid duplicates) not null if a delay parameter has been encountered for current request */
+    private Location delayArg;
+    /** (to avoid duplicates) not null if a channel parameter has been encountered for current request */
+    private Location channelArg;
+    /** (to avoid duplicates) not null if a payload parameter has been encountered for current request */
+    private Location payloadArg;
+    /** (to avoid duplicates) not null if a timer parameter has been encountered for current request */
+    private Location settimerArg;
+    /** (to avoid duplicates) not null if a timer parameter has been encountered for current request */
+    private Location resettimerArg;
+    /** (to avoid duplicates) not null if a timer parameter has been encountered for current request */
+    private Location expiretimerArg;
+
+    private boolean argOK;
+    private void clearRequestArgs() {
+        indexArg = null;
+        delayArg = null;
+        channelArg = null;
+        payloadArg = null;
+        settimerArg = null;
+        resettimerArg = null;
+        expiretimerArg = null;
+    }
+
+    private ArrayList<StxTerm> argList;
+    private ArrayList<StxAction> actionList;
+    private HashMap<String,String> receiveMap;
+    HashMap<String,String> delayExtraMap = null;
+    private StxCall theCall;
+
+    /** (to avoid duplicates) not null if a distribution law attribute has been encountered for current transition labels section */
+    private Location distributionLbl;
+    /** (to avoid duplicates) not null if a weight attribute has been encountered for current transition labels section */
+    private Location weightLbl;
+    /** to clear the relevant anti-duplicate flags (locations) at the beginning of a transition labels section */
+    private void clearTransitionLbls() {
+        distributionLbl = null;
+        weightLbl = null;
+    }
+    private boolean okRequest;
+
+    /** customized error handling, throw exception with message, and location in lexer's errorLocation */
+    public void report_fatal_error(String message, Object info) throws Exception {
+        this.done_parsing();
+        ComplexSymbolFactory.ComplexSymbol cs = (ComplexSymbolFactory.ComplexSymbol)info;
+        lexer.setErrorLocation(cs.getLeft());
+        throw new Exception("parser: syntax error for input symbol \"" + cs.getName() + "\"");
+    }
+    /** customized error handling */
+    public void report_error(String message, Object info) {}
+    /** customized error handling */
+    public void syntax_error(Symbol cur_token) {}
+
+    /** set current transition w.r.t. requestIndex and request it and type it as trivial request (if not already requested) */
+    private void tryTrivialRequest(Location left, Location right) {
+        getTransition(requestIndex);
+        if (theTransition.isRequested()) {
+            addError( new AvatarFromSysMLError(
+                AvatarFromSysMLError.LOWERROR,
+                left,
+                "Transition " + requestIndex + " is already requested",
+                theTransition.getRleft()) );
+        } else {
+            theTransition.setRleft(left);
+            theTransition.setRright(right);
+            theTransition.setRequested(true);
+            theTransition.setType(AvatarFromSysMLSyntax.STXTRIVIALTRANSITION);
+        }
+    }
+
+    /** a multiusage Flag */
+    private boolean flag;
+    /** a block specific flag */
+    private ArrayList<Boolean> blockFlags = new ArrayList<Boolean>();
+    private void pushBlockFlag(Boolean f) { blockFlags.add(f); }
+    private boolean popBlockFlag() {
+        boolean res = blockFlags.get(blockFlags.size() -1);
+        blockFlags.remove(blockFlags.size() -1);
+        return res;
+    }
+
+
+
+/** Cup generated class to encapsulate user supplied action code.*/
+class CUP$AvatarFromSysMLParser$actions {
+  private final AvatarFromSysMLParser parser;
+
+  /** Constructor */
+  CUP$AvatarFromSysMLParser$actions(AvatarFromSysMLParser parser) {
+    this.parser = parser;
+  }
+
+  /** Method 0 with the actual generated action code for actions 0 to 300. */
+  public final java_cup.runtime.Symbol CUP$AvatarFromSysMLParser$do_action_part00000000(
+    int                        CUP$AvatarFromSysMLParser$act_num,
+    java_cup.runtime.lr_parser CUP$AvatarFromSysMLParser$parser,
+    java.util.Stack<java_cup.runtime.Symbol>    CUP$AvatarFromSysMLParser$stack,
+    int                        CUP$AvatarFromSysMLParser$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$AvatarFromSysMLParser$result;
+
+      /* select the action based on the action number */
+      switch (CUP$AvatarFromSysMLParser$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 0: // model ::= PACKAGE IDENT LBRAC featureList RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("model",2, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 1: // $START ::= model EOF 
+            {
+              Object RESULT =null;
+		Location start_valxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location start_valxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object start_val = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		RESULT = start_val;
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("$START",0, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          /* ACCEPT */
+          CUP$AvatarFromSysMLParser$parser.done_parsing();
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 2: // model ::= PACKAGE IDENT LBRAC RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("model",2, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 3: // featureList ::= feature 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("featureList",3, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 4: // featureList ::= feature featureList 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("featureList",3, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 5: // feature ::= PRIVATE IMPORT 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 6: // feature ::= PUBLIC IMPORT 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 7: // feature ::= datatypeDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 8: // feature ::= relationDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 9: // feature ::= channelDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 10: // feature ::= signalBinding 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 11: // feature ::= messageDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 12: // feature ::= blockDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 13: // feature ::= blockAlias 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("feature",4, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 14: // typeIdent ::= INTEGER_T 
+            {
+              String RESULT =null;
+		 RESULT = "Integer"; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("typeIdent",0, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 15: // typeIdent ::= BOOLEAN_T 
+            {
+              String RESULT =null;
+		 RESULT = "Boolean"; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("typeIdent",0, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 16: // typeIdent ::= IDENT 
+            {
+              String RESULT =null;
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		 RESULT = id.getAvatarName(); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("typeIdent",0, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 17: // specializes ::= SPECIALIZES 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("specializes",5, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 18: // specializes ::= REFINES 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("specializes",5, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 19: // subsets ::= SUBSETS 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("subsets",6, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 20: // subsets ::= REFINES 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("subsets",6, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 21: // blockAlias ::= PART IDENT COLON AVBLOCK_T subsets blockChain EQUAL blockChain SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockAlias",7, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 22: // blockChain ::= IDENT 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockChain",8, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 23: // blockChain ::= IDENT POINT blockChain 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockChain",8, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 24: // datatypeDecl ::= datatypeDeclHEADER LBRAC fieldDecls RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("datatypeDecl",9, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 25: // datatypeDecl ::= datatypeDeclHEADER LBRAC RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("datatypeDecl",9, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 26: // datatypeDeclHEADER ::= ATTRIBUTE DEF IDENT specializes AVDATATYPE_T 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    theStructure = dataTypeMap.get(id.getAvatarName());
+    if (theStructure == null) {
+        theStructure = new StxDataType(id.getAvatarName());
+        dataTypeMap.put(id.getAvatarName(), (StxDataType) theStructure);
+    }
+    if (! theStructure.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Datatype " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        theStructure.setLeft(axleft);
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("datatypeDeclHEADER",10, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 27: // fieldDecls ::= fieldDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldDecls",11, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 28: // fieldDecls ::= fieldDecl fieldDecls 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldDecls",11, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 29: // fieldDecl ::= fieldDeclBegin fieldVal SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    theField.setRight(qxright);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldDecl",12, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 30: // fieldDeclBegin ::= ATTRIBUTE IDENT COLON typeIdent 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location tpxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location tpxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String tp = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+    theField = new StxField(axleft, axright, id.getAvatarName(), tp);
+    StxField clash = theStructure.addField(theField);
+    if (clash != null)  // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, axleft, "Field " + id.getAvatarName() +
+        " is already declared", clash.getLeft()) );
+    theField.setLeft(axleft);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldDeclBegin",63, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 31: // fieldVal ::= 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldVal",64, CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 32: // fieldVal ::= GETS iexpr 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		  theField.setInitialValue(e);  
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldVal",64, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 33: // fieldVal ::= DEFAULT GETS iexpr 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		  theField.setInitialValue(e);  theField.setDefaultValue(true); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fieldVal",64, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 34: // relationDecl ::= syncRelDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relationDecl",13, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 35: // relationDecl ::= nbfRelDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relationDecl",13, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 36: // relationDecl ::= bfRelDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relationDecl",13, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 37: // syncRelDecl ::= syncRelDeclBegin relParams RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location xxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location xxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object x = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    if (flag) theRelation.setRight(xxright);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("syncRelDecl",14, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 38: // syncRelDeclBegin ::= PART IDENT COLON SYNCREL_T EQUAL SYNCREL_T LPAR 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		
+        Location l = idxleft;
+        getRelation(id.getAvatarName());
+        if (! theRelation.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Relation " + id.getAvatarName() +
+            " is already declared", theRelation.getLeft()) );
+            flag = false;
+        } else {
+            theRelation.setAsynchronous(false);
+            theRelation.setLeft(pxleft);
+            flag = true;
+        }
+        clearRelationParams(); // at beginning, no parameter has been parsed
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("syncRelDeclBegin",24, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 39: // nbfRelDecl ::= nbfRelDeclBegin relParams RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location xxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location xxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object x = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    if (flag) theRelation.setRight(xxright);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("nbfRelDecl",15, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 40: // nbfRelDeclBegin ::= PART IDENT COLON NBFIFOREL_T EQUAL NBFIFOREL_T LPAR 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		
+       getRelation(id.getAvatarName());
+        if (! theRelation.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Relation " + id.getAvatarName() +
+            " is already declared", theRelation.getLeft()) );
+            flag = false;
+        } else {
+           theRelation.setAsynchronous(true);
+           theRelation.setBlocking(false);
+           theRelation.setLeft(pxleft);
+           flag = true;
+       }
+       clearRelationParams(); // at beginning, no parameter has been parsed
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("nbfRelDeclBegin",25, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 41: // bfRelDecl ::= bfRelDeclBegin relParams RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location xxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location xxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object x = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    if (flag) theRelation.setRight(xxright);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("bfRelDecl",16, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 42: // bfRelDeclBegin ::= PART IDENT COLON BFIFOREL_T EQUAL BFIFOREL_T LPAR 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		
+        getRelation(id.getAvatarName());
+        if (! theRelation.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Relation " + id.getAvatarName() +
+            " is already declared", theRelation.getLeft()) );
+            flag = false;
+        } else {
+            theRelation.setAsynchronous(true);
+            theRelation.setBlocking(true);
+            theRelation.setLeft(pxleft);
+            flag = true;
+        }
+        clearRelationParams(); // at beginning, no parameter has been parsed
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("bfRelDeclBegin",26, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 43: // relParams ::= relParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParams",17, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 44: // relParams ::= relParam COMMA relParams 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParams",17, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 45: // relParam ::= block1Param 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParam",18, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 46: // relParam ::= block2Param 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParam",18, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 47: // relParam ::= privateParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParam",18, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 48: // relParam ::= maxsizeParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParam",18, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 49: // relParam ::= lossyParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("relParam",18, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 50: // block1Param ::= BLOCK1_F EQUAL IDENT 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		
+    if (block1ParamFlag == null) { // param has not yet been parsed
+        StxBlock tmp = theBlock;
+        getBlock(id.getAvatarName());
+        theRelation.setBlock1(theBlock);
+        theBlock = tmp;
+        block1ParamFlag = bxleft; // now, param has been parsed
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,bxleft,"bloc1 is already set\n", block1ParamFlag));
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("block1Param",19, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 51: // block2Param ::= BLOCK2_F EQUAL IDENT 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		
+    if (block2ParamFlag == null) { // param has not yet been parsed
+        StxBlock tmp = theBlock; // save current block
+        getBlock(id.getAvatarName());
+        theRelation.setBlock2(theBlock); // set param
+        theBlock = tmp; // restore current block
+        block2ParamFlag = bxleft; // now, param has been parsed
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, bxleft,"bloc2 is already set\n", block2ParamFlag));
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("block2Param",20, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 52: // privateParam ::= PRIVATE_F EQUAL BOOL 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Boolean b = CUP$AvatarFromSysMLParser$stack.peek().<Boolean>value();
+		
+    if (privateParamFlag == null) { // param has not yet been parsed
+        theRelation.setPrivate(b); // set param
+        privateParamFlag = pxleft; // now, param has been parsed
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, bxleft,"private parameter is already set\n", privateParamFlag));
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("privateParam",21, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 53: // maxsizeParam ::= MAXSIZE_F EQUAL INT 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Integer i = CUP$AvatarFromSysMLParser$stack.peek().<Integer>value();
+		
+    if (maxsizeParamFlag == null) { // param has not yet been parsed
+        if (! theRelation.getAsynchronous()) // irrelevant parameter
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, zxleft, "synchroneous relations don't have maxsize parameter\n"));
+        else {
+            theRelation.setFifoSize(i);  // set param
+            maxsizeParamFlag = zxleft; // now, param has been parsed
+        }
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, zxleft, "maxsize is already set\n", maxsizeParamFlag));
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("maxsizeParam",22, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 54: // lossyParam ::= LOSSY_F EQUAL BOOL 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Boolean b = CUP$AvatarFromSysMLParser$stack.peek().<Boolean>value();
+		
+    if (lossyParamFlag == null) { // param has not yet been parsed
+        if (! theRelation.getAsynchronous()) // irrelevant parameter
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, zxleft, "synchroneous relations don't have lossy parameter\n"));
+        else {
+            theRelation.setLossy(b);  // set param
+            lossyParamFlag = zxleft; // now, param has been parsed
+        }
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, zxleft, "lossy is already set\n", lossyParamFlag));
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("lossyParam",23, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 55: // channelDecl ::= syncChDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("channelDecl",27, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 56: // channelDecl ::= nbfChDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("channelDecl",27, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 57: // channelDecl ::= bfChDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("channelDecl",27, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 58: // syncChDecl ::= PART IDENT COLON SYNC_T EQUAL SYNC_T LPAR RELATION_F EQUAL IDENT RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10).<Ident>value();
+		Location rlxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location rlxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident rl = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object s = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    getRelation(rl.getAvatarName());
+    getChannel(id.getAvatarName());
+    if (! theChannel.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Channel " + id.getAvatarName() +
+        " is already declared", theChannel.getLeft()) );
+    } else {
+        if (theRelation.getAsynchronous()) // incompatible relation and channel types
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,
+                pxleft, "synchroneous channels require a synchroneous relation\n"));
+        theRelation.addChannel(theChannel);
+        theChannel.setLeft(pxleft);
+        theChannel.setRight(sxright);
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("syncChDecl",28, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 59: // nbfChDecl ::= PART IDENT COLON NBFIFO_T EQUAL NBFIFO_T LPAR RELATION_F EQUAL IDENT RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10).<Ident>value();
+		Location rlxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location rlxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident rl = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object s = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    getRelation(rl.getAvatarName());
+    getChannel(id.getAvatarName());
+    if (! theChannel.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Channel " + id.getAvatarName() +
+        " is already declared", theChannel.getLeft()) );
+    } else {
+        if (! theRelation.getAsynchronous()) // incompatible relation and channel types
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,
+                pxleft, "FIFO channels require an asynchroneous relation\n"));
+        theRelation.addChannel(theChannel);
+        theChannel.setLeft(pxleft);
+        theChannel.setRight(sxright);
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("nbfChDecl",29, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 60: // bfChDecl ::= PART IDENT COLON BFIFO_T EQUAL BFIFO_T LPAR RELATION_F EQUAL IDENT RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-10).<Ident>value();
+		Location rlxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location rlxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident rl = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object s = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    getRelation(rl.getAvatarName());
+    getChannel(id.getAvatarName());
+    if (! theChannel.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Channel " + id.getAvatarName() +
+        " is already declared", theChannel.getLeft()) );
+    } else {
+        if (! theRelation.getAsynchronous()) // incompatible relation and channel types
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,
+                pxleft, "FIFO channels require an asynchroneous relation\n"));
+        theRelation.addChannel(theChannel);
+        theChannel.setLeft(pxleft);
+        theChannel.setRight(sxright);
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("bfChDecl",30, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-11), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 61: // signalBinding ::= inSignalBinding 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("signalBinding",31, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 62: // signalBinding ::= outSignalBinding 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("signalBinding",31, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 63: // inSignalBinding ::= BINDING COLON INSIGNALBINDING_T BIND IDENT POINT IDENT EQUAL IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident s = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(true); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+    
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inSignalBinding",32, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-9), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 64: // inSignalBinding ::= BINDING COLON INSIGNALBINDING_T BIND IDENT EQUAL IDENT POINT IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident s = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(true); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+   
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inSignalBinding",32, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-9), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 65: // outSignalBinding ::= BINDING COLON OUTSIGNALBINDING_T BIND IDENT POINT IDENT EQUAL IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident s = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(false); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+   
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outSignalBinding",33, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-9), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 66: // outSignalBinding ::= BINDING COLON OUTSIGNALBINDING_T BIND IDENT EQUAL IDENT POINT IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Ident c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Ident>value();
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident s = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(false); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+   
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outSignalBinding",33, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-9), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 67: // messageDecl ::= inMessageDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("messageDecl",34, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 68: // messageDecl ::= outMessageDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("messageDecl",34, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 69: // inMessageDecl ::= inMessageDeclBegin inMessageDeclBODY 
+            {
+              Object RESULT =null;
+		Location mxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location mxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object m = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    if (messageChannelParam == null) // missing channel parameter
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, mxleft, "In-message channel has not been set", null) );
+    if (flag) theStructure.setRight(bxright);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inMessageDecl",35, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 70: // inMessageDeclBegin ::= PART DEF IDENT specializes INMESSAGE_T LBRAC 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		
+    getInMessage(id.getAvatarName());
+    if (! theStructure.declare() ) { //duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "In-message profile " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        theStructure.setLeft(pxleft);
+        messageChannelParam = null;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inMessageDeclBegin",41, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 71: // inMessageDeclBODY ::= messageChannel RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inMessageDeclBODY",37, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 72: // inMessageDeclBODY ::= messageChannel fieldDecls RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inMessageDeclBODY",37, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 73: // inMessageDeclBODY ::= fieldDecls messageChannel RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("inMessageDeclBODY",37, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 74: // messageChannel ::= PRIVATE PART CHANNEL_F COLON CHANNEL_T EQUAL IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7).<Object>value();
+		Location chxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location chxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident ch = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        if (messageChannelParam != null) // duplicate
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft,
+                "in-message channel has already been set", messageChannelParam));
+        else { // message param is not set
+            getChannel(ch.getAvatarName());
+            theChannel.setInProfile((StxInMessage)theStructure);
+            ((StxInMessage)theStructure).setChannel(theChannel);
+            messageChannelParam = pxleft; // now it is
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("messageChannel",38, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 75: // messageChannel ::= PRIVATE PART CHANNEL_F EQUAL IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location chxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location chxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident ch = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        if (messageChannelParam != null) // duplicate
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft,
+                "in-message channel has already been set", messageChannelParam));
+        else { // message param is not set
+            getChannel(ch.getAvatarName());
+            theChannel.setInProfile((StxInMessage)theStructure);
+            ((StxInMessage)theStructure).setChannel(theChannel);
+            messageChannelParam = pxleft; // now it is
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("messageChannel",38, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 76: // outMessageDecl ::= outMessageDeclBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theOutMessage.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDecl",36, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 77: // outMessageDecl ::= outMessageDeclBegin LBRAC RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theOutMessage.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDecl",36, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 78: // outMessageDecl ::= outMessageDeclBegin LBRAC outMessageDeclBODY 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDecl",36, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 79: // outMessageDeclBegin ::= PART DEF IDENT specializes OUTMESSAGE_T COMMA IDENT 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Ident>value();
+		Location mxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location mxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident m = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		
+        getInMessage(m.getAvatarName());
+        getOutMessage(id.getAvatarName(), (StxInMessage)theStructure);
+        if (! theOutMessage.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Out-message profile " + id.getAvatarName() +
+            " is already declared", theStructure.getLeft()) );
+            flag = false;
+        } else {
+            theOutMessage.setLeft(pxleft);
+            flag = true;
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDeclBegin",42, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 80: // outMessageDeclBegin ::= PART DEF IDENT specializes IDENT COMMA OUTMESSAGE_T 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Ident>value();
+		Location mxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location mxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident m = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+        getInMessage(m.getAvatarName());
+        if (! theOutMessage.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Out-message profile " + id.getAvatarName() +
+            " is already declared", theStructure.getLeft()) );
+            flag = false;
+        } else {
+            theOutMessage.setLeft(pxleft);
+            flag = true;
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDeclBegin",42, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 81: // outMessageDeclBODY ::= redefineField RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theOutMessage.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDeclBODY",39, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 82: // outMessageDeclBODY ::= redefineField outMessageDeclBODY 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("outMessageDeclBODY",39, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 83: // redefineField ::= ATTRIBUTE IDENT REDEFINES IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location oxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location oxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident o = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident i = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+        StxField ofield = new StxField(axleft, axright, o.getAvatarName(), "");
+        // maps output field to its dual input field
+        if (! theOutMessage.addFieldLink(ofield, i.getAvatarName()))
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Field " + o.getAvatarName() +
+                        " is already declared") );
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("redefineField",40, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 84: // blockDecl ::= blockDeclBegin RBRAC 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object e = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		 if (popBlockFlag()) theBlock.setRight(exright); popBlock(); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockDecl",43, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 85: // blockDecl ::= blockDeclBegin blockDeclBODY 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object e = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		 if (popBlockFlag()) theBlock.setRight(exright); popBlock(); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockDecl",43, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 86: // blockDeclBegin ::= PART IDENT COLON AVBLOCK_T LBRAC 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		
+        StxBlock tmp = theBlock; // locally memorize father
+        pushBlock(); // globally memorize father state
+        getBlock(id.getAvatarName()); // set current block
+        if (! theBlock.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Block " + id.getAvatarName() +
+            " is already declared", theBlock.getLeft()) );
+            pushBlockFlag(false);
+        } else {
+            theBlock.setFather(tmp);
+            theBlock.setLeft(pxleft);
+            pushBlockFlag(true);
+        }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockDeclBegin",44, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 87: // blockDeclBODY ::= blockItem RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockDeclBODY",45, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 88: // blockDeclBODY ::= blockItem blockDeclBODY 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockDeclBODY",45, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 89: // blockItem ::= attributeDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 90: // blockItem ::= constantDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 91: // blockItem ::= methodDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 92: // blockItem ::= signalDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 93: // blockItem ::= timerDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 94: // blockItem ::= stateMachine 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 95: // blockItem ::= blockDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("blockItem",46, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 96: // attributeDecl ::= attributeDeclHEADER SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theAttribute.setRight(qxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("attributeDecl",47, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 97: // attributeDecl ::= attributeDeclHEADER GETS iexpr SEMICOLON 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        theAttribute.setInit(e);
+        if (flag) theAttribute.setRight(qxright);
+    
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("attributeDecl",47, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 98: // attributeDecl ::= attributeDeclHEADER DEFAULT GETS iexpr SEMICOLON 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        theAttribute.setInit(e);
+        if (flag) theAttribute.setRight(qxright);
+        theAttribute.setDefaultValue(true);
+    
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("attributeDecl",47, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 99: // attributeDeclHEADER ::= ATTRIBUTE IDENT COLON typeIdent 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location tpxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location tpxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String tp = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+        getAttribute(id.getAvatarName(), tp);
+        if (! theAttribute.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+            " is already declared  (or there is an attribute with same name)", theAttribute.getLeft()) );
+            flag = false;
+        } else {
+            StxElement e = theBlock.addAttribute(theAttribute);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxSignal)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+                    " cannot be added: name already used for signal", e.getLeft()));
+                else ;
+            flag = true;
+            theAttribute.setLeft(axleft);
+        }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("attributeDeclHEADER",49, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 100: // constantDecl ::= constantDeclHEADER SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theAttribute.setRight(qxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("constantDecl",48, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 101: // constantDecl ::= constantDeclHEADER GETS iexpr SEMICOLON 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        theAttribute.setInit(e);
+        if (flag) theAttribute.setRight(qxright);
+    
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("constantDecl",48, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 102: // constantDeclHEADER ::= READONLY ATTRIBUTE IDENT COLON typeIdent 
+            {
+              Object RESULT =null;
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object r = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location tpxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location tpxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String tp = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+        getAttribute(id.getAvatarName(), tp);
+        if (! theAttribute.declare() ) {
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+            " is already declared (or there is an attribute with same name)", theAttribute.getLeft()) );
+            flag = false;
+        } else {
+            StxElement e = theBlock.addConstant(theAttribute);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxSignal)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+                    " cannot be added: name already used for signal", e.getLeft()));
+                else ;
+            flag = true;
+            theAttribute.setLeft(rxleft);
+        }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("constantDeclHEADER",62, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 103: // methodDecl ::= voidMethodDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("methodDecl",50, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 104: // methodDecl ::= calcMethodDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("methodDecl",50, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 105: // voidMethodDecl ::= voidMethodDeclBegin LBRAC RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("voidMethodDecl",51, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 106: // voidMethodDecl ::= voidMethodDeclBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("voidMethodDecl",51, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 107: // voidMethodDecl ::= voidMethodDeclBegin LBRAC fieldDecls RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("voidMethodDecl",51, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 108: // voidMethodDeclBegin ::= ACTION IDENT COLON AVVOIDMETHOD_T 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getMethod(id.getAvatarName());
+    if (! theStructure.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        StxElement e = theBlock.addMethod((StxMethod)theStructure);
+        if (e != null)
+            if (e instanceof StxTimer)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for timer", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        flag = true;
+        theStructure.setLeft(axleft);
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("voidMethodDeclBegin",60, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 109: // calcMethodDecl ::= calcMethodDeclBegin LBRAC RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodDecl",52, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 110: // calcMethodDecl ::= calcMethodDeclBegin LBRAC calcMethodItems RBRAC 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theStructure.setRight(bxright);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodDecl",52, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 111: // calcMethodDeclBegin ::= CALC IDENT COLON AVCALCMETHOD_T 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getMethod(id.getAvatarName());
+    if (! theStructure.declare() ) {
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        StxElement e = theBlock.addMethod((StxMethod)theStructure);
+        if (e != null)
+            if (e instanceof StxTimer)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for timer", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        flag = true;
+        theStructure.setLeft(cxleft);
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodDeclBegin",61, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 112: // calcMethodItems ::= calcMethodItem 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodItems",53, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 113: // calcMethodItems ::= calcMethodItem calcMethodItems 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodItems",53, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 114: // calcMethodItem ::= fieldDecl 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodItem",54, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 115: // calcMethodItem ::= RETURN COLON typeIdent SEMICOLON 
+            {
+              Object RESULT =null;
+		Location tpxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location tpxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String tp = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		
+        ((StxMethod)theStructure).setReturnType(tp);
+    
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("calcMethodItem",54, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 116: // signalDecl ::= PART IDENT COLON FIFO_T SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        getSignal(theBlock.getName(),id.getAvatarName());
+        if (! theSignal.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+            " is already declared", theSignal.getLeft()) );
+        } else {
+            StxElement e = theBlock.addSignal(theSignal);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for timer", e.getLeft()));
+                else if (e instanceof StxAttribute)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for constant or attribute", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else;
+            theSignal.setLeft(pxleft);
+            theSignal.setRight(qxright);
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("signalDecl",55, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 117: // signalDecl ::= PART IDENT COLON CHANNEL_T SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        getSignal(theBlock.getName(),id.getAvatarName());
+        if (! theSignal.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+            " is already declared", theSignal.getLeft()) );
+        } else {
+            StxElement e = theBlock.addSignal(theSignal);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for timer", e.getLeft()));
+                else if (e instanceof StxAttribute)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for constant or attribute", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else;
+            theSignal.setLeft(pxleft);
+            theSignal.setRight(qxright);
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("signalDecl",55, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 118: // timerDecl ::= PART IDENT COLON AVTIMER_T EQUAL AVTIMER_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        StxTimer t = new StxTimer(id.getAvatarName(), pxleft, qxright);
+        StxElement e = theBlock.addTimer(t);
+        if (e != null) // conflict with existing item e
+            if (e instanceof StxTimer && !e.declare())
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " is already declared", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxMethod)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for method", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        else t.declare();
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("timerDecl",56, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 119: // timerDecl ::= PART IDENT COLON AVTIMER_T SEMICOLON 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        StxTimer t = new StxTimer(id.getAvatarName(), pxleft, qxright);
+        StxElement e = theBlock.addTimer(t);
+        if (e != null) // conflict with existing item e
+            if (e instanceof StxTimer && !e.declare())
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " is already declared", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxMethod)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for method", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        else t.declare();
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("timerDecl",56, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 120: // stateMachine ::= stateMachineBegin LBRAC stateMachineItems RBRAC 
+            {
+              Object RESULT =null;
+		
+        theBlock.setStates(stateMap.values().toArray(new StxState[0])); // all collected information is put in block states
+        stateMap = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachine",57, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 121: // stateMachine ::= stateMachineBegin LBRAC RBRAC 
+            {
+              Object RESULT =null;
+		
+        theBlock.setStates(stateMap.values().toArray(new StxState[0])); // all collected information is put in block states
+        stateMap = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachine",57, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 122: // stateMachine ::= stateMachineBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		
+        theBlock.setStates(stateMap.values().toArray(new StxState[0])); // all collected information is put in block states
+        stateMap = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachine",57, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 123: // stateMachineBegin ::= EXHIBIT STATE STATEMACHINE COLON AVSTATEMACHINE_T 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		
+    if (stateMachine != null)
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, exleft,
+            "State Machine is already declared", stateMachine) );
+    else
+        stateMachine = exleft;
+
+    stateMap = new HashMap<String, StxState>();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachineBegin",119, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 124: // stateMachineItems ::= stateMachineItem 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachineItems",58, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 125: // stateMachineItems ::= stateMachineItem stateMachineItems 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachineItems",58, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 126: // stateMachineItem ::= state 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachineItem",59, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 127: // stateMachineItem ::= transition 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stateMachineItem",59, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 128: // state ::= standardState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 129: // state ::= stopState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 130: // state ::= startState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 131: // state ::= sendState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 132: // state ::= receiveState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 133: // state ::= randomState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 134: // state ::= countState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 135: // state ::= presendState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 136: // state ::= prereceiveState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 137: // state ::= setTimerState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 138: // state ::= resetTimerState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 139: // state ::= expireTimerState 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("state",65, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 140: // startState ::= startStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("startState",66, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 141: // startState ::= startStateBegin EQUAL AVSTARTSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("startState",66, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 142: // startState ::= startStateBegin EQUAL AVSTARTSTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("startState",66, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 143: // startStateBegin ::= ENTRY ACTION IDENT COLON AVSTARTSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSTARTSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("startStateBegin",107, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 144: // standardState ::= standardStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("standardState",67, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 145: // standardState ::= standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("standardState",67, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 146: // standardState ::= standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR poolParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("standardState",67, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 147: // standardStateBegin ::= STATE IDENT COLON AVSTANDARDSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSTANDARDSTATE);
+        theState.setName(id.getAvatarName());
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("standardStateBegin",108, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 148: // stopState ::= stopStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stopState",68, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 149: // stopState ::= stopStateBegin EQUAL AVSTOPSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stopState",68, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 150: // stopStateBegin ::= EXIT ACTION IDENT COLON AVSTOPSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSTOPSTATE);
+        theState.setLeft(zxright);
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stopStateBegin",109, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 151: // sendState ::= sendStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("sendState",69, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 152: // sendState ::= sendStateBegin EQUAL AVSENDSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("sendState",69, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 153: // sendState ::= sendStateBegin EQUAL AVSENDSTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("sendState",69, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 154: // sendStateBegin ::= STATE IDENT COLON AVSENDSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSENDSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("sendStateBegin",110, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 155: // receiveState ::= receiveStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveState",70, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 156: // receiveState ::= receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveState",70, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 157: // receiveState ::= receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveState",70, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 158: // receiveStateBegin ::= STATE IDENT COLON AVRECEIVESTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXRECEIVESTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveStateBegin",111, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 159: // randomState ::= randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction COMMA requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomState",71, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 160: // randomState ::= randomStateBegin EQUAL AVRANDOMSTATE_T LPAR requestParam COMMA randomAction RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomState",71, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 161: // randomState ::= randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomState",71, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 162: // randomStateBegin ::= STATE IDENT COLON AVRANDOMSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXRANDOMSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomStateBegin",112, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 163: // countState ::= countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countState",72, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 164: // countState ::= countStateBegin EQUAL AVCOUNTSTATE_T LPAR requestParam COMMA countAction RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countState",72, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 165: // countState ::= countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction COMMA requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countState",72, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 166: // countStateBegin ::= STATE IDENT COLON AVCOUNTSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXCOUNTSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countStateBegin",113, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 167: // presendState ::= presendStateBegin EQUAL AVPRESENDSTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("presendState",73, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 168: // presendStateBegin ::= STATE IDENT COLON AVPRESENDSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXPRESENDSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("presendStateBegin",114, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 169: // prereceiveState ::= prereceiveStateBegin EQUAL AVPRERECEIVESTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("prereceiveState",74, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 170: // prereceiveStateBegin ::= STATE IDENT COLON AVPRERECEIVESTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXPRERECEIVESTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("prereceiveStateBegin",115, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 171: // setTimerState ::= setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("setTimerState",75, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 172: // setTimerState ::= setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("setTimerState",75, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 173: // setTimerState ::= setTimerStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("setTimerState",75, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 174: // setTimerStateBegin ::= STATE IDENT COLON AVSETTIMERSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSETTIMERSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("setTimerStateBegin",116, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 175: // resetTimerState ::= resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resetTimerState",76, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 176: // resetTimerState ::= resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resetTimerState",76, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 177: // resetTimerState ::= resetTimerStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resetTimerState",76, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 178: // resetTimerStateBegin ::= STATE IDENT COLON AVRESETTIMERSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXRESETTIMERSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resetTimerStateBegin",117, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 179: // expireTimerState ::= expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR requestParam RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expireTimerState",77, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 180: // expireTimerState ::= expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR RPAR SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expireTimerState",77, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 181: // expireTimerState ::= expireTimerStateBegin SEMICOLON 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expireTimerState",77, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 182: // expireTimerStateBegin ::= STATE IDENT COLON AVEXPIRETIMERSTATE_T 
+            {
+              Object RESULT =null;
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXEXPIRETIMERSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expireTimerStateBegin",118, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 183: // poolParam ::= POOL_F EQUAL LBRAC LPAR RPAR RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("poolParam",78, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 184: // poolParam ::= POOL_F EQUAL LBRAC NULL RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("poolParam",78, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 185: // poolParam ::= POOL_F EQUAL LBRAC LPAR requestList RPAR RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("poolParam",78, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 186: // poolParam ::= POOL_F EQUAL request 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("poolParam",78, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 187: // requestParam ::= REQUEST_F EQUAL request 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestParam",79, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 188: // requestList ::= request 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestList",80, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 189: // requestList ::= request COMMA requestList 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestList",80, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 190: // request ::= dummy IF iexpr QUEST simpleRequest ELSE NOKREQUEST_U LPAR INT RPAR 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8)).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8)).xright;
+		Object i = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8).<Object>value();
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7).<String>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location nxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location nxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Integer n = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Integer>value();
+		Location zxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location zxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object z = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (n != requestIndex + 1) {
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, nxleft,
+                " request index must be the request range in the request list (beginning at 1)", null) );
+        }
+        if (okRequest) {
+            theTransition.setGuard(e);
+            theTransition.setRleft(ixleft);
+            theTransition.setRright(zxright);
+        }
+        requestIndex++;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("request",81, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-9), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 191: // request ::= dummy simpleRequest 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object i = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (okRequest) {
+            theTransition.setRleft(ixleft);
+            theTransition.setRright(ixright);
+        }
+        requestIndex++;
+       
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("request",81, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 192: // dummy ::= 
+            {
+              Object RESULT =null;
+		
+            getTransition(requestIndex);
+            if (theTransition.isRequested()) { // duplicate
+                addError( new AvatarFromSysMLError(
+                    AvatarFromSysMLError.LOWERROR,
+                    lexer.getLocation(),
+                    "Transition " + (requestIndex + 1) + " is already requested",
+                    theTransition.getRleft()) );
+                okRequest = false; // request is a duplikate (skip handling)
+            } else {
+                theTransition.setRequested(true);
+                okRequest = true; // request is not a duplicate
+            }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("dummy",149, CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 193: // simpleRequest ::= trivialRequest 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("simpleRequest",82, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 194: // simpleRequest ::= sendRequest 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("simpleRequest",82, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 195: // simpleRequest ::= receiveRequest 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("simpleRequest",82, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 196: // simpleRequest ::= setTimerRequest 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("simpleRequest",82, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 197: // simpleRequest ::= resetTimerRequest 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("simpleRequest",82, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 198: // simpleRequest ::= expireTimerRequest 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("simpleRequest",82, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 199: // trivialRequest ::= IMMEDIATEREQUEST_U 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object i = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (!(requestIndex == 0)) {
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, ixleft,
+            " immediate request has index 1 and thus can only be used as first request", null) );
+        }
+        if (okRequest)
+            theTransition.setType(AvatarFromSysMLSyntax.STXTRIVIALTRANSITION);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("trivialRequest",83, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 200: // trivialRequest ::= trivialRequestBegin requestArgs RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("trivialRequest",83, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 201: // trivialRequestBegin ::= TRIVIALREQUEST_T LPAR 
+            {
+              Object RESULT =null;
+		
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXTRIVIALTRANSITION);
+    clearRequestArgs();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("trivialRequestBegin",101, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 202: // sendRequest ::= sendRequestBegin requestArgs RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("sendRequest",86, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 203: // sendRequestBegin ::= SENDREQUEST_T LPAR 
+            {
+              Object RESULT =null;
+		
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXSENDTRANSITION);
+    clearRequestArgs();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("sendRequestBegin",102, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 204: // receiveRequest ::= receiveRequestBegin requestArgs RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveRequest",87, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 205: // receiveRequestBegin ::= RECEIVEREQUEST_T LPAR 
+            {
+              Object RESULT =null;
+		
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXRECEIVETRANSITION);
+    clearRequestArgs();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveRequestBegin",103, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 206: // setTimerRequest ::= setTimerRequestBegin requestArgs RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("setTimerRequest",88, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 207: // setTimerRequestBegin ::= SETTIMERREQUEST_T LPAR 
+            {
+              Object RESULT =null;
+		
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXSETTIMERTRANSITION);
+    clearRequestArgs();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("setTimerRequestBegin",104, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 208: // resetTimerRequest ::= resetTimerRequestBegin requestArgs RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resetTimerRequest",89, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 209: // resetTimerRequestBegin ::= RESETTIMERREQUEST_T LPAR 
+            {
+              Object RESULT =null;
+		
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION);
+    clearRequestArgs();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resetTimerRequestBegin",105, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 210: // expireTimerRequest ::= expireTimerRequestBegin requestArgs RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expireTimerRequest",90, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 211: // expireTimerRequestBegin ::= EXPIRETIMERREQUEST_T LPAR 
+            {
+              Object RESULT =null;
+		
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION);
+    clearRequestArgs();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expireTimerRequestBegin",106, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 212: // requestArgs ::= requestArg 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArgs",84, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 213: // requestArgs ::= requestArg COMMA requestArgs 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArgs",84, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 214: // requestArg ::= indexParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 215: // requestArg ::= delayParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 216: // requestArg ::= channelParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 217: // requestArg ::= payloadParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 218: // requestArg ::= settimerParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 219: // requestArg ::= resettimerParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 220: // requestArg ::= expiretimerParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("requestArg",85, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 221: // indexParam ::= INDEX_F EQUAL INT 
+            {
+              Object RESULT =null;
+		Location fxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location fxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object f = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Integer i = CUP$AvatarFromSysMLParser$stack.peek().<Integer>value();
+		
+    if (indexArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING,fxleft, "index parameter has already been set", indexArg));
+    if (i != requestIndex + 1)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING,fxleft, "the index of a request must be its range (beginning at 1)",
+        null));
+    if (indexArg == null) indexArg = fxleft;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("indexParam",91, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 222: // delayParam ::= delayKeyword EQUAL delayExpr 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("delayParam",92, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 223: // delayKeyword ::= DELAY_F 
+            {
+              Object RESULT =null;
+		Location dxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location dxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object d = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+    if (delayArg != null) {
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, dxleft, "delay parameter has already been set", delayArg));
+        argOK = false;
+    }
+    else {
+        delayArg = dxleft;
+        argOK = true;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("delayKeyword",148, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 224: // delayExpr ::= iexpr 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 if (argOK && okRequest) theTransition.setMinDelay(e); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("delayExpr",93, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 225: // delayExpr ::= delayRandomExpr 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("delayExpr",93, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 226: // delayRandomExpr ::= BOUNDRANDOM_U LPAR iexpr COMMA iexpr RPAR 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		String i = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<String>value();
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		
+        if(argOK && okRequest) {
+            theTransition.setMinDelay(i);
+            theTransition.setMaxDelay(a);
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("delayRandomExpr",95, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 227: // payloadParam ::= payloadParamBegin IDENT LPAR termList RPAR 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		 // termlist fills argList
+        if (argOK) { // not duplicate
+            if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION)
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                    "such payload is only relevant for send transitions", null));
+            if (okRequest) theTransition.setSendPayload(argList);
+        }
+        argList = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("payloadParam",96, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 228: // payloadParam ::= payloadParamBegin IDENT LPAR RPAR 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		
+       if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for send transitions", null));
+           if (okRequest) theTransition.setSendPayload(argList);
+       }
+       argList = null;
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("payloadParam",96, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 229: // payloadParam ::= payloadParamBegin IDENT 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		
+       if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for send transitions", null));
+           if (okRequest) theTransition.setSendPayload(argList);
+       }
+       argList = null;
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("payloadParam",96, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 230: // payloadParam ::= payloadParamBegin TIMERSETMSG_T LPAR stxExpr RPAR 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		StxExpr e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<StxExpr>value();
+		
+        if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXSETTIMERTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for set-timer transitions", null));
+           argList.add(e);
+           if (okRequest) theTransition.setSendPayload(argList);
+        }
+        argList = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("payloadParam",96, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 231: // payloadParam ::= payloadParamBegin TIMERRESETMSG_T LPAR RPAR 
+            {
+              Object RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object b = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		
+        if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for reset-timer transitions", null));
+           if (okRequest) theTransition.setSendPayload(argList);
+        }
+        argList = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("payloadParam",96, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 232: // payloadParamBegin ::= PAYLOAD_F EQUAL 
+            {
+              Object RESULT =null;
+		Location pxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location pxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object p = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		
+    if (payloadArg != null) {
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, pxleft, "payload parameter has already been set", payloadArg));
+        argOK = false;
+    }
+    else {
+        payloadArg = pxleft;
+        argOK = true;
+        argList= new ArrayList<StxTerm>();
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("payloadParamBegin",120, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 233: // channelParam ::= CHANNEL_F EQUAL IDENT 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Object c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		
+    if (channelArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "channel parameter has already been set", channelArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION &&
+             theTransition.getType() != AvatarFromSysMLSyntax.STXRECEIVETRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for send or receive transitions", null));
+       if (okRequest) {
+           theTransition.setSignalName(theBlock.getName(), id.getAvatarName());
+           commTransitions.add(theTransition);
+       }
+       channelArg = cxleft;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("channelParam",97, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 234: // settimerParam ::= CHANNEL_F EQUAL IDENT POINT SET_TM 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    if (settimerArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "timer channel parameter has already been set", settimerArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXSETTIMERTRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for set-timer transitions", null));
+        if (okRequest) theTransition.setTimer(id.getAvatarName());
+        settimerArg = cxleft;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("settimerParam",98, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 235: // resettimerParam ::= CHANNEL_F EQUAL IDENT POINT RESET_TM 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    if (resettimerArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "timer channel parameter has already been set", settimerArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for reset-timer transitions", null));
+        if (okRequest) theTransition.setTimer(id.getAvatarName());
+        resettimerArg = cxleft;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("resettimerParam",99, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 236: // expiretimerParam ::= CHANNEL_F EQUAL IDENT POINT EXPIRE_TM 
+            {
+              Object RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		
+    if (expiretimerArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "timer channel parameter has already been set", settimerArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for expire-timer transitions", null));
+        if (okRequest) theTransition.setTimer(id.getAvatarName());
+        expiretimerArg = cxleft;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expiretimerParam",100, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 237: // termList ::= stxRvalue 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		StxTerm e = CUP$AvatarFromSysMLParser$stack.peek().<StxTerm>value();
+		 argList.add(e); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("termList",130, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 238: // termList ::= termList COMMA stxRvalue 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		StxTerm e = CUP$AvatarFromSysMLParser$stack.peek().<StxTerm>value();
+		 argList.add(e); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("termList",130, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 239: // targetParam ::= target EQUAL fullIdent 
+            {
+              Object RESULT =null;
+		
+    theState.setVariable(stringAcc.toString());
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("targetParam",122, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 240: // target ::= TARGET_F 
+            {
+              Object RESULT =null;
+		
+    stringAcc = new StringBuffer();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("target",136, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 241: // fullIdent ::= IDENT 
+            {
+              Object RESULT =null;
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		 stringAcc.append(id.getAvatarName()); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fullIdent",137, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 242: // fullIdent ::= fullIdent POINT IDENT 
+            {
+              Object RESULT =null;
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		 stringAcc.append("." + id.getAvatarName()); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fullIdent",137, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 243: // randomAction ::= STATEACTION_F EQUAL ASSIGNMENT_T LPAR targetParam COMMA randomParam RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomAction",121, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 244: // randomAction ::= STATEACTION_F EQUAL ASSIGNMENT_T LPAR randomParam COMMA targetParam RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomAction",121, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 245: // randomParam ::= VALUE_F EQUAL actionRandomExpr 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("randomParam",123, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 246: // actionRandomExpr ::= BOUNDRANDOM_U LPAR iexpr COMMA iexpr RPAR 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		String i = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<String>value();
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		
+        theState.setMinValue(i);
+        theState.setMaxValue(a);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("actionRandomExpr",94, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 247: // countAction ::= STATEACTION_F EQUAL ASSIGNMENT_T LPAR targetParam COMMA countParam RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countAction",124, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 248: // countAction ::= STATEACTION_F EQUAL ASSIGNMENT_T LPAR countParam COMMA targetParam RPAR 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countAction",124, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 249: // countParam ::= VALUE_F EQUAL IDENT POINT AMOUNT_U LPAR RPAR 
+            {
+              Object RESULT =null;
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Ident>value();
+		
+    getSignal(theBlock.getName(),id.getAvatarName());
+    theState.setSignal(theSignal);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("countParam",125, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 250: // transition ::= transitionBegin THEN IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transition",126, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 251: // transition ::= transitionBegin doActions THEN IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transition",126, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 252: // transition ::= transitionBegin THEN IDENT LBRAC transitionLabels RBRAC 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setDelayExtra(delayExtraMap);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+        delayExtraMap = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transition",126, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 253: // transition ::= transitionBegin doActions THEN IDENT LBRAC transitionLabels RBRAC 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Ident>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setDelayExtra(delayExtraMap);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+        delayExtraMap = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transition",126, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-6), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 254: // transitionBegin ::= TRANSITION COLON AVTRANSITION_T FIRST IDENT 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location stxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location stxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident st = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		
+        getState(st.getAvatarName());
+        getTransition(0);
+        if (!theTransition.declare()) {
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, txleft,
+                "transition with same index has already been declared", null));
+            flag = false;
+        }
+        else flag = true;
+        clearTransitionLbls();
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionBegin",131, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 255: // transitionBegin ::= TRANSITION COLON AVTRANSITION_T FIRST IDENT IF INDEX_F EQ INT 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8).<Object>value();
+		Location stxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location stxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Ident st = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Ident>value();
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Integer i = CUP$AvatarFromSysMLParser$stack.peek().<Integer>value();
+		
+       getState(st.getAvatarName());
+       getTransition(i-1);
+       if (!theTransition.declare()) {
+           addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, txleft,
+                "transition with same index has already been declared", null));
+           flag = true;
+       }
+       else flag = true;
+       clearTransitionLbls();
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionBegin",131, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 256: // doActions ::= transitionActionBegin LBRAC RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("doActions",127, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 257: // doActions ::= transitionActionBegin LBRAC transitionAction RBRAC 
+            {
+              Object RESULT =null;
+		
+            if (flag) theTransition.setActions(actionList);
+            actionList = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("doActions",127, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 258: // doActions ::= receiveActionBegin LBRAC RBRAC 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("doActions",127, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 259: // doActions ::= receiveActionBegin LBRAC receiveAction RBRAC 
+            {
+              Object RESULT =null;
+		
+            if (flag) theTransition.setReceivePayload(receiveMap);
+            receiveMap = null;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("doActions",127, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 260: // transitionActionBegin ::= DO ACTION COLON TRANSITIONACTION_T 
+            {
+              Object RESULT =null;
+		
+     actionList = new ArrayList<StxAction>();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionActionBegin",138, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 261: // receiveActionBegin ::= DO ACTION COLON RECEIVEACTION_T 
+            {
+              Object RESULT =null;
+		
+     receiveMap = new HashMap<String,String>();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveActionBegin",139, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 262: // transitionAction ::= FIRST START_U SEMICOLON THEN DONE_U SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionAction",133, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 263: // transitionAction ::= FIRST START_U SEMICOLON actionSeq 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionAction",133, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 264: // actionSeq ::= THEN act THEN DONE_U SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("actionSeq",128, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 265: // actionSeq ::= THEN act actionSeq 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("actionSeq",128, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 266: // act ::= assign fulllIdent GETS stxRvalue SEMICOLON 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		String id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<String>value();
+		Location vxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location vxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		StxTerm v = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<StxTerm>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        actionList.add(new StxAction(axleft, qxright, id , v));
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("act",129, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 267: // act ::= ACTION EQUAL stxCall SEMICOLON 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3).<Object>value();
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		StxCall c = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<StxCall>value();
+		Location qxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location qxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Object q = CUP$AvatarFromSysMLParser$stack.peek().<Object>value();
+		
+        actionList.add(new StxAction(axleft, qxright, c));
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("act",129, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 268: // assign ::= ASSIGN 
+            {
+              Object RESULT =null;
+		
+    stringAcc = new StringBuffer();
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("assign",135, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 269: // fulllIdent ::= fullIdent 
+            {
+              String RESULT =null;
+		
+    RESULT = stringAcc.toString();
+    stringAcc.setLength(0);
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("fulllIdent",1, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 270: // receiveAction ::= messageLine receiveAssigns 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAction",134, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 271: // receiveAction ::= receiveAssigns messageLine 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAction",134, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 272: // messageLine ::= ITEM MSG_U COLON IDENT EQUAL PAYLOAD_F AS IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("messageLine",140, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-8), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 273: // receiveAssigns ::= FIRST START_U SEMICOLON THEN DONE_U SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAssigns",141, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 274: // receiveAssigns ::= FIRST START_U SEMICOLON receiveAssignSeq 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAssigns",141, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 275: // receiveAssignSeq ::= receiveAssign THEN DONE_U SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAssignSeq",142, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-3), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 276: // receiveAssignSeq ::= receiveAssign receiveAssignSeq 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAssignSeq",142, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 277: // receiveAssign ::= THEN assign fullIdent GETS MSG_U POINT IDENT SEMICOLON 
+            {
+              Object RESULT =null;
+		Location txleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xleft;
+		Location txright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7)).xright;
+		Object t = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7).<Object>value();
+		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident id = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+    String test = receiveMap.get(id.getAvatarName());
+    if (test == null)  receiveMap.put(id.getAvatarName(),stringAcc.toString());
+    else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, txleft,
+            "component " + id.getAvatarName() + " has already been assigned", null));
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("receiveAssign",143, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-7), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 278: // transitionLabels ::= transitionLabel SEMICOLON 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionLabels",132, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 279: // transitionLabels ::= transitionLabel SEMICOLON transitionLabels 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionLabels",132, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 280: // transitionLabel ::= distributionLabel 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionLabel",144, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 281: // transitionLabel ::= weightLabel 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionLabel",144, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 282: // transitionLabel ::= extraLabel 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("transitionLabel",144, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 283: // distributionLabel ::= ATTRIBUTE DISTRIBUTION_A COLON STRING_T EQUAL STRING 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String s = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+    if (distributionLbl != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft,
+            "distribution label has already been assigned", distributionLbl));
+    else {
+        theTransition.setDelayDistributionLaw(s);
+        distributionLbl = axleft;
+    }
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("distributionLabel",145, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 284: // weightLabel ::= ATTRIBUTE WEIGHT_A COLON REAL_T EQUAL REAL 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Double r = CUP$AvatarFromSysMLParser$stack.peek().<Double>value();
+		
+        if (weightLbl != null)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft,
+                "weight label has already been assigned", weightLbl));
+        else {
+            theTransition.setProbability(r);
+            weightLbl = axleft;
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("weightLabel",146, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 285: // weightLabel ::= ATTRIBUTE WEIGHT_A COLON REAL_T EQUAL INT 
+            {
+              Object RESULT =null;
+		Location axleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xleft;
+		Location axright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5)).xright;
+		Object a = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5).<Object>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Integer r = CUP$AvatarFromSysMLParser$stack.peek().<Integer>value();
+		
+        if (weightLbl != null)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft,
+                "weight label has already been assigned", weightLbl));
+        else {
+            theTransition.setProbability((double)r);
+            weightLbl = axleft;
+        }
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("weightLabel",146, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 286: // extraLabel ::= ATTRIBUTE ANYNAME COLON STRING_T EQUAL STRING 
+            {
+              Object RESULT =null;
+		Location nxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location nxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		String n = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<String>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String s = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+        if (delayExtraMap == null)
+            delayExtraMap = new HashMap<String,String>();
+        delayExtraMap.put(n,s);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("extraLabel",147, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 287: // extraLabel ::= ATTRIBUTE IDENT COLON STRING_T EQUAL STRING 
+            {
+              Object RESULT =null;
+		Location nxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xleft;
+		Location nxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4)).xright;
+		Ident n = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-4).<Ident>value();
+		Location sxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location sxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String s = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+        if (delayExtraMap == null)
+            delayExtraMap = new HashMap<String,String>();
+        delayExtraMap.put(n.getAvatarName(),s);
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("extraLabel",147, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-5), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 288: // stxRvalue ::= stxCall 
+            {
+              StxTerm RESULT =null;
+		Location cxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location cxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		StxCall c = CUP$AvatarFromSysMLParser$stack.peek().<StxCall>value();
+		 RESULT = c; // FUNCTION CALL
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxRvalue",150, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 289: // stxRvalue ::= expr 
+            {
+              StxTerm RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = new StxExpr(e);  // INT/BOOL EXPRESSION 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxRvalue",150, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 290: // stxRvalue ::= complexIdent 
+            {
+              StxTerm RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String i = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = new StxId(i); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxRvalue",150, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 291: // stxExpr ::= iexpr 
+            {
+              StxExpr RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = new StxExpr(e); // INT/BOOL EXPRESSION 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxExpr",151, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 292: // iexpr ::= expr 
+            {
+              String RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = e; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("iexpr",153, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 293: // iexpr ::= complexIdent 
+            {
+              String RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String i = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = i; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("iexpr",153, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 294: // expr ::= iexpr PLUS iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " + " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 295: // expr ::= iexpr MINUS iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " - " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 296: // expr ::= iexpr MULT iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " * " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 297: // expr ::= iexpr DIV iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " / " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 298: // expr ::= iexpr MOD iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " % " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 299: // expr ::= MINUS iexpr 
+            {
+              String RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = "-" + e; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number "+CUP$AvatarFromSysMLParser$act_num+"found in internal parse table");
+
+        }
+    } /* end of method */
+  /** Method 1 with the actual generated action code for actions 300 to 600. */
+  public final java_cup.runtime.Symbol CUP$AvatarFromSysMLParser$do_action_part00000001(
+    int                        CUP$AvatarFromSysMLParser$act_num,
+    java_cup.runtime.lr_parser CUP$AvatarFromSysMLParser$parser,
+    java.util.Stack<java_cup.runtime.Symbol>    CUP$AvatarFromSysMLParser$stack,
+    int                        CUP$AvatarFromSysMLParser$top)
+    throws java.lang.Exception
+    {
+      /* Symbol object for return from actions */
+      java_cup.runtime.Symbol CUP$AvatarFromSysMLParser$result;
+
+      /* select the action based on the action number */
+      switch (CUP$AvatarFromSysMLParser$act_num)
+        {
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 300: // expr ::= iexpr OR iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " || " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 301: // expr ::= iexpr AND iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " && " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 302: // expr ::= NOT iexpr 
+            {
+              String RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = "!" + e; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 303: // expr ::= iexpr LT iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " < " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 304: // expr ::= iexpr GT iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " > " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 305: // expr ::= iexpr LEQ iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " <= " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 306: // expr ::= iexpr GEQ iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " >= " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 307: // expr ::= iexpr EQ iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " == " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 308: // expr ::= iexpr DIF iexpr 
+            {
+              String RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		String l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<String>value();
+		Location rxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location rxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String r = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = l + " != " + r; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 309: // expr ::= LPAR iexpr RPAR 
+            {
+              String RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<String>value();
+		 RESULT = "(" + e + ")"; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 310: // expr ::= INT 
+            {
+              String RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Integer i = CUP$AvatarFromSysMLParser$stack.peek().<Integer>value();
+		 RESULT = "" + i; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 311: // expr ::= BOOL 
+            {
+              String RESULT =null;
+		Location bxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location bxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Boolean b = CUP$AvatarFromSysMLParser$stack.peek().<Boolean>value();
+		 RESULT = ( b ? "true" : "false" ); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("expr",154, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 312: // complexIdent ::= IDENT 
+            {
+              String RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		Ident e = CUP$AvatarFromSysMLParser$stack.peek().<Ident>value();
+		 RESULT = e.getAvatarName(); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("complexIdent",155, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 313: // complexIdent ::= IDENT POINT complexIdent 
+            {
+              String RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2)).xright;
+		Ident e = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2).<Ident>value();
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String i = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 RESULT = e.getAvatarName() + "." + i; 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("complexIdent",155, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 314: // stxCall ::= stxCallBegin RPAR 
+            {
+              StxCall RESULT =null;
+		
+        theCall.addSegment(stringAcc.toString() + ")");
+        RESULT = theCall;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCall",152, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 315: // stxCall ::= stxCallBegin stxCallParams RPAR 
+            {
+              StxCall RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		
+        theCall.addSegment(stringAcc.toString() + ")");
+        RESULT = theCall;
+      
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCall",152, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 316: // stxCallBegin ::= IDENT LPAR 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident i = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+    theCall = new StxCall();
+    stringAcc = new StringBuffer(i.getAvatarName() + "(");
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCallBegin",156, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 317: // stxCallParams ::= stxCallParam 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCallParams",161, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 318: // stxCallParams ::= stxCallParam comma stxCallParams 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCallParams",161, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 319: // comma ::= COMMA 
+            {
+              Object RESULT =null;
+		 stringAcc.append(", "); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("comma",158, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 320: // stxCallParam ::= expr 
+            {
+              Object RESULT =null;
+		Location exleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location exright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String e = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		 stringAcc.append(e); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCallParam",157, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 321: // stxCallParam ::= complexIdent 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
+		String i = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
+		
+        theCall.addSegment(stringAcc.toString());
+        theCall.addIdent(i);
+        stringAcc.setLength(0);
+     
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCallParam",157, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 322: // stxCallParam ::= call 
+            {
+              Object RESULT =null;
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("stxCallParam",157, CUP$AvatarFromSysMLParser$stack.peek(), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 323: // call ::= callBegin RPAR 
+            {
+              Object RESULT =null;
+		 stringAcc.append(")"); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("call",159, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 324: // call ::= stxCallBegin stxCallParams RPAR 
+            {
+              Object RESULT =null;
+		Location lxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location lxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Object l = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Object>value();
+		 stringAcc.append(")"); 
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("call",159, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 325: // callBegin ::= IDENT LPAR 
+            {
+              Object RESULT =null;
+		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xleft;
+		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1)).xright;
+		Ident i = CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1).<Ident>value();
+		
+    stringAcc.append(i.getAvatarName() + "(");
+
+              CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("callBegin",160, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-1), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
+            }
+          return CUP$AvatarFromSysMLParser$result;
+
+          /* . . . . . .*/
+          default:
+            throw new Exception(
+               "Invalid action number "+CUP$AvatarFromSysMLParser$act_num+"found in internal parse table");
+
+        }
+    } /* end of method */
+
+  /** Method splitting the generated action code into several parts. */
+  public final java_cup.runtime.Symbol CUP$AvatarFromSysMLParser$do_action(
+    int                        CUP$AvatarFromSysMLParser$act_num,
+    java_cup.runtime.lr_parser CUP$AvatarFromSysMLParser$parser,
+    java.util.Stack<java_cup.runtime.Symbol>     CUP$AvatarFromSysMLParser$stack,
+    int                        CUP$AvatarFromSysMLParser$top)
+    throws java.lang.Exception
+    {
+      /* select the action handler based on the action number */
+      switch (CUP$AvatarFromSysMLParser$act_num/300)
+        {
+          /*. . . . . . . . 0 < #action < 300. . . . . . . . . . . .*/
+          case 0: 
+              return CUP$AvatarFromSysMLParser$do_action_part00000000(
+                               CUP$AvatarFromSysMLParser$act_num,
+                               CUP$AvatarFromSysMLParser$parser,
+                               CUP$AvatarFromSysMLParser$stack,
+                               CUP$AvatarFromSysMLParser$top);
+          /*. . . . . . . . 300 < #action < 600. . . . . . . . . . . .*/
+          case 1: 
+              return CUP$AvatarFromSysMLParser$do_action_part00000001(
+                               CUP$AvatarFromSysMLParser$act_num,
+                               CUP$AvatarFromSysMLParser$parser,
+                               CUP$AvatarFromSysMLParser$stack,
+                               CUP$AvatarFromSysMLParser$top);
+          /* . . . no valid action number: . . .*/
+          default:
+            throw new Exception("Invalid action number found in internal parse table");
+
+        }      /* end of switch */
+    }
+}
+
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSymbols.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSymbols.java
new file mode 100644
index 0000000000000000000000000000000000000000..736916502301596b12e994dc5e1a88da491331cd
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSymbols.java
@@ -0,0 +1,638 @@
+
+//----------------------------------------------------
+// The following code was generated by CUP v0.11b 20210814 (GIT d69c832)
+//----------------------------------------------------
+
+package avatartranslator.tosysmlv2;
+
+/** CUP generated class containing symbol constants. */
+public class AvatarFromSysMLSymbols {
+  /* terminals */
+  public static final int AVDATATYPE_T = 62;
+  public static final int BLOCK1_F = 23;
+  public static final int BLOCK = 117;
+  public static final int CONNECT = 123;
+  public static final int EXIT = 140;
+  public static final int TRIVIALREQUEST_T = 51;
+  public static final int INDIVIDUAL = 155;
+  public static final int GT = 226;
+  public static final int MULT = 221;
+  public static final int AVSTOPSTATE_T = 67;
+  public static final int LOSSY_F = 19;
+  public static final int STATEACTION_F = 27;
+  public static final int GEQ = 228;
+  public static final int UNTIL = 205;
+  public static final int INCLUDE = 154;
+  public static final int BOUNDRANDOM_U = 57;
+  public static final int ANALYSIS = 106;
+  public static final int BOOLEAN_T = 58;
+  public static final int TRANSITION = 204;
+  public static final int AVSTANDARDSTATE_T = 66;
+  public static final int PROTECTED = 180;
+  public static final int CALC = 119;
+  public static final int FORK = 146;
+  public static final int STATEMACHINE = 79;
+  public static final int IMPLIES = 151;
+  public static final int AVEXPIRETIMERSTATE_T = 82;
+  public static final int SNAPSHOT = 194;
+  public static final int PRIVATE_F = 21;
+  public static final int VIA = 211;
+  public static final int RENDER = 186;
+  public static final int REAL_T = 61;
+  public static final int ATTRIBUTE = 114;
+  public static final int AVSTATEMACHINE_T = 76;
+  public static final int PUBLIC = 181;
+  public static final int SYNC_T = 47;
+  public static final int ENUM = 137;
+  public static final int DONE_U = 36;
+  public static final int REAL = 6;
+  public static final int UMINUS = 229;
+  public static final int REQUIREMENT = 190;
+  public static final int VERIFICATION = 209;
+  public static final int COMMENT = 121;
+  public static final int EQ = 7;
+  public static final int TARGET_F = 33;
+  public static final int MSG_U = 55;
+  public static final int AVPRESENDSTATE_T = 73;
+  public static final int SUCCESSION = 200;
+  public static final int MOD = 223;
+  public static final int DEPENDENCY = 130;
+  public static final int EXPOSE = 141;
+  public static final int GETS = 17;
+  public static final int DIV = 222;
+  public static final int AVPRERECEIVESTATE_T = 74;
+  public static final int SETTIMERREQUEST_T = 83;
+  public static final int PORT = 178;
+  public static final int REDEFINES = 183;
+  public static final int LPAR = 8;
+  public static final int ITEM = 159;
+  public static final int ASSIGN = 110;
+  public static final int SUBSETS = 199;
+  public static final int AFTER = 101;
+  public static final int NULL = 218;
+  public static final int STAKEHOLDER = 196;
+  public static final int DIF = 224;
+  public static final int PRIVATE = 179;
+  public static final int DO = 132;
+  public static final int EOF = 0;
+  public static final int MINUS = 220;
+  public static final int AVVOIDMETHOD_T = 64;
+  public static final int AVBLOCK_T = 63;
+  public static final int INT = 2;
+  public static final int TIMERSETMSG_T = 86;
+  public static final int BFIFOREL_T = 39;
+  public static final int NBFIFOREL_T = 40;
+  public static final int IMPORT = 152;
+  public static final int PACKAGE = 174;
+  public static final int RECEIVEACTION_T = 77;
+  public static final int ACTION = 99;
+  public static final int ELSE = 134;
+  public static final int EQUAL = 16;
+  public static final int SEND = 193;
+  public static final int WEIGHT_A = 94;
+  public static final int DERIVED = 131;
+  public static final int END = 135;
+  public static final int AVSETTIMERSTATE_T = 80;
+  public static final int INSIGNALBINDING_T = 48;
+  public static final int PART = 176;
+  public static final int DISTRIBUTION_A = 93;
+  public static final int VERIFY = 210;
+  public static final int OR = 171;
+  public static final int FIRST = 143;
+  public static final int BINDING = 116;
+  public static final int IMMEDIATEREQUEST_U = 52;
+  public static final int ASSERT = 109;
+  public static final int WHEN = 214;
+  public static final int FILTER = 142;
+  public static final int AND = 107;
+  public static final int TIMEREXPIREMSG_T = 88;
+  public static final int OF = 170;
+  public static final int BY = 118;
+  public static final int INTEGER_T = 59;
+  public static final int EXPIRE_TM = 92;
+  public static final int CONCERN = 122;
+  public static final int PARALLEL = 175;
+  public static final int ASSIGNMENT_T = 56;
+  public static final int STRING_T = 60;
+  public static final int REP = 188;
+  public static final int AMOUNT_U = 34;
+  public static final int REQUEST_F = 26;
+  public static final int CONNECTION = 124;
+  public static final int REF = 184;
+  public static final int IDENT = 95;
+  public static final int NBFIFO_T = 46;
+  public static final int BOOL = 3;
+  public static final int ALIAS = 102;
+  public static final int INTERFACE = 157;
+  public static final int PAYLOAD_F = 30;
+  public static final int BLOCK2_F = 24;
+  public static final int LEQ = 227;
+  public static final int QUEST = 18;
+  public static final int TRANSITIONACTION_T = 78;
+  public static final int EVENT = 138;
+  public static final int AT = 113;
+  public static final int OCCURRENCE = 169;
+  public static final int AS = 108;
+  public static final int FRAME = 147;
+  public static final int CASE = 120;
+  public static final int AVCOUNTSTATE_T = 72;
+  public static final int CHANNEL_T = 43;
+  public static final int REFINES = 217;
+  public static final int START_U = 35;
+  public static final int PLUS = 219;
+  public static final int INDEX_F = 28;
+  public static final int FIFO_T = 44;
+  public static final int RELATION_T = 37;
+  public static final int ALL = 103;
+  public static final int AVTRANSITION_T = 75;
+  public static final int MERGE = 163;
+  public static final int RPAR = 9;
+  public static final int CHANNEL_F = 31;
+  public static final int SYNCREL_T = 38;
+  public static final int WHILE = 215;
+  public static final int REQUIRE = 189;
+  public static final int METADATA = 165;
+  public static final int ALLOCATE = 104;
+  public static final int XOR = 216;
+  public static final int AVTIMER_T = 89;
+  public static final int RELATION_F = 22;
+  public static final int AVRECEIVESTATE_T = 70;
+  public static final int ACCEPT = 98;
+  public static final int AVSTARTSTATE_T = 68;
+  public static final int DEF = 127;
+  public static final int ISTYPE = 158;
+  public static final int COMMA = 12;
+  public static final int LT = 225;
+  public static final int VARIATION = 208;
+  public static final int MESSAGE = 164;
+  public static final int LOOP = 162;
+  public static final int BIND = 115;
+  public static final int ORDERED = 172;
+  public static final int ABOUT = 96;
+  public static final int EXPIRETIMERREQUEST_T = 85;
+  public static final int VIEW = 212;
+  public static final int AVCALCMETHOD_T = 65;
+  public static final int AVRESETTIMERSTATE_T = 81;
+  public static final int OUTMESSAGE_T = 42;
+  public static final int AVSENDSTATE_T = 69;
+  public static final int TIMESLICE = 202;
+  public static final int ALLOCATION = 105;
+  public static final int NOT = 167;
+  public static final int OUT = 173;
+  public static final int LBRAC = 10;
+  public static final int SUBJECT = 198;
+  public static final int TIMERRESETMSG_T = 87;
+  public static final int DELAY_F = 29;
+  public static final int ASSUME = 112;
+  public static final int JOIN = 160;
+  public static final int VIEWPOINT = 213;
+  public static final int STATE = 197;
+  public static final int OBJECTIVE = 168;
+  public static final int RETURN = 191;
+  public static final int SET_TM = 90;
+  public static final int FOR = 145;
+  public static final int THEN = 201;
+  public static final int READONLY = 182;
+  public static final int INMESSAGE_T = 41;
+  public static final int ABSTRACT = 97;
+  public static final int STRING = 4;
+  public static final int DECIDE = 126;
+  public static final int VALUE_F = 32;
+  public static final int DOC = 133;
+  public static final int ENTRY = 136;
+  public static final int ACTOR = 100;
+  public static final int USE = 206;
+  public static final int FROM = 148;
+  public static final int REFERENCES = 185;
+  public static final int RESETTIMERREQUEST_T = 84;
+  public static final int DEFINED = 129;
+  public static final int ASSOC = 111;
+  public static final int SATISFY = 192;
+  public static final int FLOW = 144;
+  public static final int OUTSIGNALBINDING_T = 49;
+  public static final int SEMICOLON = 13;
+  public static final int POINT = 15;
+  public static final int RESET_TM = 91;
+  public static final int SENDREQUEST_T = 53;
+  public static final int RENDERING = 187;
+  public static final int CONSTRAINT = 125;
+  public static final int POOL_F = 25;
+  public static final int AVRANDOMSTATE_T = 71;
+  public static final int SPECIALIZES = 195;
+  public static final int NONUNIQUE = 166;
+  public static final int IN = 153;
+  public static final int VARIANT = 207;
+  public static final int LANGUAGE = 161;
+  public static final int error = 1;
+  public static final int IF = 150;
+  public static final int NOKREQUEST_U = 50;
+  public static final int DEFAULT = 128;
+  public static final int COLON = 14;
+  public static final int EXHIBIT = 139;
+  public static final int PERFORM = 177;
+  public static final int MAXSIZE_F = 20;
+  public static final int ANYNAME = 5;
+  public static final int HASTYPE = 149;
+  public static final int RECEIVEREQUEST_T = 54;
+  public static final int TO = 203;
+  public static final int RBRAC = 11;
+  public static final int INOUT = 156;
+  public static final int BFIFO_T = 45;
+  public static final String[] terminalNames = new String[] {
+  "EOF",
+  "error",
+  "INT",
+  "BOOL",
+  "STRING",
+  "ANYNAME",
+  "REAL",
+  "EQ",
+  "LPAR",
+  "RPAR",
+  "LBRAC",
+  "RBRAC",
+  "COMMA",
+  "SEMICOLON",
+  "COLON",
+  "POINT",
+  "EQUAL",
+  "GETS",
+  "QUEST",
+  "LOSSY_F",
+  "MAXSIZE_F",
+  "PRIVATE_F",
+  "RELATION_F",
+  "BLOCK1_F",
+  "BLOCK2_F",
+  "POOL_F",
+  "REQUEST_F",
+  "STATEACTION_F",
+  "INDEX_F",
+  "DELAY_F",
+  "PAYLOAD_F",
+  "CHANNEL_F",
+  "VALUE_F",
+  "TARGET_F",
+  "AMOUNT_U",
+  "START_U",
+  "DONE_U",
+  "RELATION_T",
+  "SYNCREL_T",
+  "BFIFOREL_T",
+  "NBFIFOREL_T",
+  "INMESSAGE_T",
+  "OUTMESSAGE_T",
+  "CHANNEL_T",
+  "FIFO_T",
+  "BFIFO_T",
+  "NBFIFO_T",
+  "SYNC_T",
+  "INSIGNALBINDING_T",
+  "OUTSIGNALBINDING_T",
+  "NOKREQUEST_U",
+  "TRIVIALREQUEST_T",
+  "IMMEDIATEREQUEST_U",
+  "SENDREQUEST_T",
+  "RECEIVEREQUEST_T",
+  "MSG_U",
+  "ASSIGNMENT_T",
+  "BOUNDRANDOM_U",
+  "BOOLEAN_T",
+  "INTEGER_T",
+  "STRING_T",
+  "REAL_T",
+  "AVDATATYPE_T",
+  "AVBLOCK_T",
+  "AVVOIDMETHOD_T",
+  "AVCALCMETHOD_T",
+  "AVSTANDARDSTATE_T",
+  "AVSTOPSTATE_T",
+  "AVSTARTSTATE_T",
+  "AVSENDSTATE_T",
+  "AVRECEIVESTATE_T",
+  "AVRANDOMSTATE_T",
+  "AVCOUNTSTATE_T",
+  "AVPRESENDSTATE_T",
+  "AVPRERECEIVESTATE_T",
+  "AVTRANSITION_T",
+  "AVSTATEMACHINE_T",
+  "RECEIVEACTION_T",
+  "TRANSITIONACTION_T",
+  "STATEMACHINE",
+  "AVSETTIMERSTATE_T",
+  "AVRESETTIMERSTATE_T",
+  "AVEXPIRETIMERSTATE_T",
+  "SETTIMERREQUEST_T",
+  "RESETTIMERREQUEST_T",
+  "EXPIRETIMERREQUEST_T",
+  "TIMERSETMSG_T",
+  "TIMERRESETMSG_T",
+  "TIMEREXPIREMSG_T",
+  "AVTIMER_T",
+  "SET_TM",
+  "RESET_TM",
+  "EXPIRE_TM",
+  "DISTRIBUTION_A",
+  "WEIGHT_A",
+  "IDENT",
+  "ABOUT",
+  "ABSTRACT",
+  "ACCEPT",
+  "ACTION",
+  "ACTOR",
+  "AFTER",
+  "ALIAS",
+  "ALL",
+  "ALLOCATE",
+  "ALLOCATION",
+  "ANALYSIS",
+  "AND",
+  "AS",
+  "ASSERT",
+  "ASSIGN",
+  "ASSOC",
+  "ASSUME",
+  "AT",
+  "ATTRIBUTE",
+  "BIND",
+  "BINDING",
+  "BLOCK",
+  "BY",
+  "CALC",
+  "CASE",
+  "COMMENT",
+  "CONCERN",
+  "CONNECT",
+  "CONNECTION",
+  "CONSTRAINT",
+  "DECIDE",
+  "DEF",
+  "DEFAULT",
+  "DEFINED",
+  "DEPENDENCY",
+  "DERIVED",
+  "DO",
+  "DOC",
+  "ELSE",
+  "END",
+  "ENTRY",
+  "ENUM",
+  "EVENT",
+  "EXHIBIT",
+  "EXIT",
+  "EXPOSE",
+  "FILTER",
+  "FIRST",
+  "FLOW",
+  "FOR",
+  "FORK",
+  "FRAME",
+  "FROM",
+  "HASTYPE",
+  "IF",
+  "IMPLIES",
+  "IMPORT",
+  "IN",
+  "INCLUDE",
+  "INDIVIDUAL",
+  "INOUT",
+  "INTERFACE",
+  "ISTYPE",
+  "ITEM",
+  "JOIN",
+  "LANGUAGE",
+  "LOOP",
+  "MERGE",
+  "MESSAGE",
+  "METADATA",
+  "NONUNIQUE",
+  "NOT",
+  "OBJECTIVE",
+  "OCCURRENCE",
+  "OF",
+  "OR",
+  "ORDERED",
+  "OUT",
+  "PACKAGE",
+  "PARALLEL",
+  "PART",
+  "PERFORM",
+  "PORT",
+  "PRIVATE",
+  "PROTECTED",
+  "PUBLIC",
+  "READONLY",
+  "REDEFINES",
+  "REF",
+  "REFERENCES",
+  "RENDER",
+  "RENDERING",
+  "REP",
+  "REQUIRE",
+  "REQUIREMENT",
+  "RETURN",
+  "SATISFY",
+  "SEND",
+  "SNAPSHOT",
+  "SPECIALIZES",
+  "STAKEHOLDER",
+  "STATE",
+  "SUBJECT",
+  "SUBSETS",
+  "SUCCESSION",
+  "THEN",
+  "TIMESLICE",
+  "TO",
+  "TRANSITION",
+  "UNTIL",
+  "USE",
+  "VARIANT",
+  "VARIATION",
+  "VERIFICATION",
+  "VERIFY",
+  "VIA",
+  "VIEW",
+  "VIEWPOINT",
+  "WHEN",
+  "WHILE",
+  "XOR",
+  "REFINES",
+  "NULL",
+  "PLUS",
+  "MINUS",
+  "MULT",
+  "DIV",
+  "MOD",
+  "DIF",
+  "LT",
+  "GT",
+  "LEQ",
+  "GEQ",
+  "UMINUS"
+  };
+
+  /* non terminals */
+  static final int receiveRequestBegin = 103;
+  static final int privateParam = 21;
+  static final int startStateBegin = 107;
+  static final int call = 159;
+  static final int receiveAssign = 143;
+  static final int specializes = 5;
+  static final int calcMethodDeclBegin = 61;
+  static final int receiveStateBegin = 111;
+  static final int messageChannel = 38;
+  static final int transitionActionBegin = 138;
+  static final int block2Param = 20;
+  static final int standardState = 67;
+  static final int stxCallParams = 161;
+  static final int featureList = 3;
+  static final int presendState = 73;
+  static final int inSignalBinding = 32;
+  static final int blockAlias = 7;
+  static final int blockChain = 8;
+  static final int receiveAction = 134;
+  static final int typeIdent = 0;
+  static final int actionRandomExpr = 94;
+  static final int prereceiveStateBegin = 115;
+  static final int relParam = 18;
+  static final int calcMethodDecl = 52;
+  static final int bfChDecl = 30;
+  static final int stopStateBegin = 109;
+  static final int signalBinding = 31;
+  static final int receiveAssignSeq = 142;
+  static final int stxCallParam = 157;
+  static final int fieldDecl = 12;
+  static final int setTimerState = 75;
+  static final int stateMachineItem = 59;
+  static final int trivialRequestBegin = 101;
+  static final int delayKeyword = 148;
+  static final int weightLabel = 146;
+  static final int messageLine = 140;
+  static final int randomParam = 123;
+  static final int indexParam = 91;
+  static final int fullIdent = 137;
+  static final int blockDecl = 43;
+  static final int outSignalBinding = 33;
+  static final int nbfRelDecl = 15;
+  static final int syncRelDecl = 14;
+  static final int presendStateBegin = 114;
+  static final int countState = 72;
+  static final int outMessageDecl = 36;
+  static final int act = 129;
+  static final int sendStateBegin = 110;
+  static final int attributeDecl = 47;
+  static final int fieldDecls = 11;
+  static final int maxsizeParam = 22;
+  static final int doActions = 127;
+  static final int voidMethodDeclBegin = 60;
+  static final int randomStateBegin = 112;
+  static final int lossyParam = 23;
+  static final int target = 136;
+  static final int sendRequestBegin = 102;
+  static final int fieldDeclBegin = 63;
+  static final int bfRelDecl = 16;
+  static final int requestParam = 79;
+  static final int payloadParam = 96;
+  static final int startState = 66;
+  static final int assign = 135;
+  static final int simpleRequest = 82;
+  static final int messageDecl = 34;
+  static final int datatypeDeclHEADER = 10;
+  static final int expr = 154;
+  static final int stopState = 68;
+  static final int randomAction = 121;
+  static final int calcMethodItem = 54;
+  static final int voidMethodDecl = 51;
+  static final int receiveState = 70;
+  static final int feature = 4;
+  static final int bfRelDeclBegin = 26;
+  static final int poolParam = 78;
+  static final int inMessageDeclBegin = 41;
+  static final int sendRequest = 86;
+  static final int nbfRelDeclBegin = 25;
+  static final int expireTimerRequestBegin = 106;
+  static final int calcMethodItems = 53;
+  static final int setTimerRequest = 88;
+  static final int redefineField = 40;
+  static final int blockDeclBegin = 44;
+  static final int dummy = 149;
+  static final int constantDeclHEADER = 62;
+  static final int blockDeclBODY = 45;
+  static final int trivialRequest = 83;
+  static final int stxCall = 152;
+  static final int countAction = 124;
+  static final int expireTimerStateBegin = 118;
+  static final int relationDecl = 13;
+  static final int inMessageDecl = 35;
+  static final int blockItem = 46;
+  static final int outMessageDeclBegin = 42;
+  static final int transitionLabels = 132;
+  static final int comma = 158;
+  static final int delayParam = 92;
+  static final int relParams = 17;
+  static final int targetParam = 122;
+  static final int actionSeq = 128;
+  static final int resetTimerRequest = 89;
+  static final int fulllIdent = 1;
+  static final int syncRelDeclBegin = 24;
+  static final int expireTimerRequest = 90;
+  static final int fieldVal = 64;
+  static final int termList = 130;
+  static final int receiveActionBegin = 139;
+  static final int randomState = 71;
+  static final int expiretimerParam = 100;
+  static final int constantDecl = 48;
+  static final int extraLabel = 147;
+  static final int distributionLabel = 145;
+  static final int state = 65;
+  static final int stateMachine = 57;
+  static final int resetTimerStateBegin = 117;
+  static final int requestArg = 85;
+  static final int syncChDecl = 28;
+  static final int signalDecl = 55;
+  static final int inMessageDeclBODY = 37;
+  static final int subsets = 6;
+  static final int standardStateBegin = 108;
+  static final int delayRandomExpr = 95;
+  static final int methodDecl = 50;
+  static final int resettimerParam = 99;
+  static final int outMessageDeclBODY = 39;
+  static final int payloadParamBegin = 120;
+  static final int receiveRequest = 87;
+  static final int channelDecl = 27;
+  static final int transition = 126;
+  static final int resetTimerRequestBegin = 105;
+  static final int channelParam = 97;
+  static final int transitionBegin = 131;
+  static final int timerDecl = 56;
+  static final int transitionAction = 133;
+  static final int stxRvalue = 150;
+  static final int sendState = 69;
+  static final int block1Param = 19;
+  static final int complexIdent = 155;
+  static final int iexpr = 153;
+  static final int datatypeDecl = 9;
+  static final int callBegin = 160;
+  static final int countParam = 125;
+  static final int expireTimerState = 77;
+  static final int prereceiveState = 74;
+  static final int requestList = 80;
+  static final int settimerParam = 98;
+  static final int setTimerRequestBegin = 104;
+  static final int requestArgs = 84;
+  static final int stateMachineItems = 58;
+  static final int request = 81;
+  static final int stxExpr = 151;
+  static final int setTimerStateBegin = 116;
+  static final int delayExpr = 93;
+  static final int attributeDeclHEADER = 49;
+  static final int resetTimerState = 76;
+  static final int model = 2;
+  static final int nbfChDecl = 29;
+  static final int receiveAssigns = 141;
+  static final int stateMachineBegin = 119;
+  static final int stxCallBegin = 156;
+  static final int transitionLabel = 144;
+  static final int countStateBegin = 113;
+}
+
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
new file mode 100644
index 0000000000000000000000000000000000000000..825e323817c74a049833e720a58bf7c1cdde6d21
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
@@ -0,0 +1,1340 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.tosysmlv2;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.function.BiConsumer;
+
+import avatartranslator.AvatarTransition;
+import java_cup.runtime.ComplexSymbolFactory.Location;
+
+/** Class AvatarFromSysMLSyntax
+ * Creation: 20/06/2024
+ *
+ * @author Sophie Coudert
+ * @version 0.1 20/06/2024
+ *
+ * Abstract Syntax "trees" (in fact models) and their components.
+ * Associated locations (left, right) locate the component with
+ * line and column in the source file
+ */
+public class AvatarFromSysMLSyntax {
+
+     /** type of idents generated for datatype names */
+    public static final byte DATATYPENAME = 0;
+     /** type of idents generated for block names */
+    public static final byte BLOCKNAME = 1;
+     /** type of idents generated for attribute or method names */
+    public static final byte ATTRIBUTENAME = 2;
+     /** type of idents generated for relation names */
+    public static final byte RELATIONNAME = 3;
+     /** type of idents generated for some part of channel names */
+    public static final byte CHANNELPRENAME = 4;
+     /** type of idents generated for signal names */
+    public static final byte SIGNALNAME = 5;
+     /** type of idents generated for channel names */
+    public static final byte CHANNELNAME = 6;
+     /** type of idents generated for signal profile names */
+    public static final byte MESSAGENAME = 7;
+     /** type of idents generated for Avatar state names */
+    public static final byte STANDARDSTATENAME = 8;
+     /** type of idents generated for start state names */
+    public static final byte STARTSTATENAME = 9;
+     /** type of idents generated for stop state names */
+    public static final byte STOPSTATENAME = 10;
+     /** type of idents generated for random operation names */
+    public static final byte RANDOMSTATENAME = 11;
+     /** type of idents generated for signal count operation names */
+    public static final byte COUNTSTATENAME = 12;
+     /** type of idents generated for signal sending action names */
+    public static final byte SENDSTATENAME = 13;
+     /** type of idents generated for signal receiving operation names */
+    public static final byte RECEIVESTATENAME = 14;
+     /** type of idents generated for technically added state before sending action names */
+    public static final byte PRESENDSTATENAME = 15;
+     /** type of idents generated for technically added state before receiving action names */
+    public static final byte PRERECEIVESTATENAME = 16;
+     /** type of idents generated for setting timer action names */
+    public static final byte SETTIMERSTATENAME = 17;
+     /** type of idents generated for resetting timer action names */
+    public static final byte RESETTIMERSTATENAME = 18;
+     /** type of idents generated for expire timer action names */
+    public static final byte EXPIRETIMERSTATENAME = 19;
+     /** type of idents generated for technically added state before setting timer action names */
+    public static final byte PRESETTIMERSTATENAME = 20;
+     /** type of idents generated for technically added state before resetting timer action names */
+    public static final byte PRERESETTIMERSTATENAME = 21;
+     /** type of idents generated for technically added state before expire timer action names */
+    public static final byte PREEXPIRETIMERSTATENAME = 22;
+     /** type of idents generated for timer names */
+    public static final byte TIMERBLOCKNAME = 23;
+     /** type of idents generated for any name between quotes that is not of another type */
+    public static final byte QUOTEDNAME = 24;
+     /** type of idents generated for Avatar-well-formed ident names */
+    public static final byte AVATARNAME = 25;
+     /** type of start states */
+    public static final byte STXSTARTSTATE = 0;
+     /** type of stop states */
+    public static final byte STXSTOPSTATE = 1;
+     /** type of Avatar states */
+    public static final byte STXSTANDARDSTATE = 2;
+     /** type of Random actions */
+    public static final byte STXRANDOMSTATE = 3;
+     /** type of count signal actions */
+    public static final byte STXCOUNTSTATE = 4;
+     /** type of send actions */
+    public static final byte STXSENDSTATE = 5;
+     /** type of receive actions */
+    public static final byte STXRECEIVESTATE = 6;
+     /** type of state added before send actions */
+    public static final byte STXPRESENDSTATE = 7;
+     /** type of state added before receive actions */
+    public static final byte STXPRERECEIVESTATE = 8;
+     /** type of set timer actions */
+    public static final byte STXSETTIMERSTATE = 9;
+     /** type of reset timer actions */
+    public static final byte STXRESETTIMERSTATE = 10;
+     /** type of expire timer actions */
+    public static final byte STXEXPIRETIMERSTATE = 11;
+     /** type of transitions without communication */
+    public static final byte STXTRIVIALTRANSITION = 0;
+     /** type of transitions requiring a send action to complete */
+    public static final byte STXSENDTRANSITION = 1;
+     /** type of transitions requiring a receive action to complete */
+    public static final byte STXRECEIVETRANSITION = 2;
+     /** type of transitions requiring a set timer action to complete */
+    public static final byte STXSETTIMERTRANSITION = 3;
+     /** type of transitions requiring a reset timer action to complete */
+    public static final byte STXRESETTIMERTRANSITION = 4;
+     /** type of transitions requiring an expire timer action to complete */
+    public static final byte STXEXPIRETIMERTRANSITION = 5;
+     /** type of assignment transitions action */
+    public static final byte STXASSIGNACTION = 0;
+     /** type of method-call transitions action */
+    public static final byte STXMETHODACTION = 1;
+
+    /** (technical) Arrays allowing to set a value at any index.
+     *
+     *  Missing values are set to null.
+     */
+    public static class MyArray<E> extends ArrayList<E> {
+        @Override
+        public E set(int index, E element){
+            int max = size();
+            for(int i = max; i <= index; i++)
+                add(null);
+            return super.set(index, element);
+        }
+        @Override
+
+        public E get(int index){
+            if (index < 0 || index >= size()) return null;
+            else return super.get(index);
+        }
+    }
+
+    /** idents collected while parsing an Avatar SysML Model.
+     *
+     * when generated, sysML names differ from original Avatar names.
+     * All these names are without quotes (removed when found while parsing)
+     */
+    public static class Ident  extends StxElement {
+        /** type of the ident */
+        private byte type;
+        /** sysML ident as found in the source file */
+        private String sysMLName; // yet unused. perhaps to remove...
+        /** Avatar name
+         *
+         * different from sysMLName for generated idents: original Avatar names are
+         * restored
+         */
+        private String avatarName;
+        /** builds an ident from a SysML string
+         * @param _type the ident type
+         * @param _smlName the SysML string
+         */
+
+        public Ident(byte _type, String _smlName) {
+            super(_smlName.trim());
+            setTypeName(_type, _smlName.trim());
+        }
+
+        /** builds an ident from a SysML string
+         * @param _left
+         * @param _right
+         * @param _type the ident type
+         * @param _smlName the SysML string
+         */
+        public Ident(Location _left, Location _right, byte _type, String _smlName) {
+            super(_smlName.trim(), _left, _right);
+            setTypeName(_type, _smlName.trim());
+        };
+
+        /** generally the Avatar name
+         * @return the associated string
+         */
+        @Override
+        public String toString() { return getAvatarName(); }
+
+        /** Sets the names.
+         *
+         * Extract the Avatar original names from the generated names if relevant.
+         * If generated, _smlName must be consistent with _type
+         *
+         * @param _type known type
+         * @param _smlName SysML String.
+         */
+        private void setTypeName(byte _type, String _smlName) {
+            type = _type;
+            if (type == AVATARNAME) {
+                sysMLName = _smlName;
+                avatarName = _smlName;
+            } else {
+                sysMLName = _smlName.substring(1, _smlName.length() - 1);
+                if (type == DATATYPENAME) {
+                    avatarName = _smlName.substring(5, _smlName.length() - 1);
+                } else if (type == ATTRIBUTENAME) {
+                    avatarName = _smlName.substring(2, _smlName.length() - 1);
+                } else if (type == SIGNALNAME) {
+                    avatarName = _smlName.substring(6, _smlName.length() - 1);
+                } else if (type == STANDARDSTATENAME) {
+                    avatarName = _smlName.substring(14, _smlName.length() - 1);
+                } else if (type == BLOCKNAME) {
+                    avatarName = _smlName.substring(6, _smlName.length() - 1);
+                } else if (type == TIMERBLOCKNAME) {
+                    avatarName = _smlName.substring(6, _smlName.length() - 1);
+                } else {
+                    avatarName = sysMLName;
+                    if (type == QUOTEDNAME) type = AVATARNAME;
+                }
+
+            }
+        }
+
+        /**  @return type of the ident */
+        public byte getType() { return type; }
+
+        /**  @return the SysML name */
+        public String getSysMLName() { return sysMLName; } //unused
+        /**  @return the Avatar name */
+        public String getAvatarName() { return avatarName; }
+        /** Check ident type */
+        public boolean is_DATATYPENAME() { return type == DATATYPENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_BLOCKNAME() { return type == BLOCKNAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_ATTRIBUTENAME() { return type == ATTRIBUTENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_RELATIONNAME() { return type == RELATIONNAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_CHANNELPRENAME() { return type == CHANNELPRENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_SIGNALNAME() { return type == SIGNALNAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_CHANNELNAME() { return type == CHANNELNAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_MESSAGENAME() { return type == MESSAGENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_STANDARDSTATENAME() { return type == STANDARDSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_STARTSTATENAME() { return type == STARTSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_STOPSTATENAME() { return type == STOPSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_RANDOMSTATENAME() { return type == RANDOMSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_COUNTSTATENAME() { return type == COUNTSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_SENDSTATENAME() { return type == SENDSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_RECEIVESTATENAME() { return type == RECEIVESTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_PRESENDSTATENAME() { return type == PRESENDSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_PRERECEIVESTATENAME() { return type == PRERECEIVESTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_SETTIMERSTATENAME() { return type == SETTIMERSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_RESETTIMERSTATENAME() { return type == RESETTIMERSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_EXPIRETIMERSTATENAME() { return type == EXPIRETIMERSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_PRESETTIMERSTATENAME() { return type == PRESETTIMERSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_PRERESETTIMERSTATENAME() { return type == PRERESETTIMERSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_PREEXPIRETIMERSTATENAME() { return type == PREEXPIRETIMERSTATENAME || type == AVATARNAME; }
+        /** Check ident type */
+        public boolean is_TIMERBLOCKNAME() { return type == TIMERBLOCKNAME || type == AVATARNAME; }
+    }
+
+    /** Class of classified expression terms */
+    public abstract static class StxTerm extends StxElement {
+        StxTerm(String _name, Location _left, Location _right) { super(_name, _left, _right); }
+        StxTerm(String _name) { super(_name); }
+        public String toString() { return getName(); }
+    }
+
+    /** Terms that are int/bool expressions.
+     *
+     *  They may be identifiers but not identified as such.*/
+    public static class StxExpr extends StxTerm {
+        public StxExpr(String v) { super(v); }
+    }
+
+    /** Terms that are Identifiers */
+    public static class StxId extends StxTerm {
+        private String value ;
+        public StxId(String v) { super(v); }
+    }
+
+    /** Terms that are method call.
+     *
+     * (technical) a call string is split into a sequence
+     * "segment ident segment ... ident segment"
+     * allowing to easily replace the idents */
+    public static class StxCall extends StxTerm {
+        private ArrayList<String> segments;
+        private ArrayList<String> idents;
+        public StxCall() {
+            super(null);
+            segments = new ArrayList<String>();
+            idents = new ArrayList<String>();
+        }
+        public String getName() { super.setName(toString()); return(super.getName()); }
+
+        public void addSegment(String s) { segments.add(s); }
+
+        public void addIdent(String s) { idents.add(s); }
+
+        public int getNbIdents() { return idents.size(); }
+
+        public String getSegment(int i) { return segments.get(i); }
+
+        public String getIdent(int i) { return idents.get(i); }
+
+        /** rebuilds the original string by concatenating segments and idents */
+        public String toString() {
+            StringBuffer result = new StringBuffer();
+            int size = getNbIdents();
+            int i;
+            for (i =0 ; i < size; i++) {
+                result.append(getSegment(i));
+                result.append(getIdent(i));
+            }
+            result.append(getSegment(i));
+            return result.toString();
+        }
+    }
+
+    /** Syntactic elements with a name and locations in the source code.
+     *
+     *  When possible, usually the left is the beginning location and the right is the ending one.
+     */
+    public abstract static class StxElement {
+        private String name;
+        protected Location defaultLocation = new Location(-1,-1);
+        private Location left;
+        private Location right;
+        private boolean declared;
+
+        public StxElement(String _name, Location _left, Location _right){ name = _name; left = _left; right = _right; declared = false; }
+
+        public StxElement(String _name){ name = _name; left = defaultLocation; right = defaultLocation; declared = false; }
+
+        public void setLeft(Location _left) { left = _left; }
+
+        public void setRight(Location _right) { right = _right; }
+
+        public String getName() { return name; }
+
+        public void setName(String _name) { name = _name; }
+
+        public Location  getLeft() { return left; }
+
+        public Location  getRight() { return right; }
+
+        /** sets the element as declared
+         *
+         * @return true iff the element was not already declared
+         */
+        public boolean declare() { boolean res = !declared; declared = true; return res; }
+
+        public boolean isDeclared() { return declared; }
+    }
+
+    /** Typed fields for syntactic elements associated to structures. */
+    public static class StxField extends StxElement {
+       private String type;
+        private String initialValue;
+        /** defaultValue = true means that the value is not explicitly set in Avatar */
+        private boolean defaultValue;
+
+        public StxField(String _name, String _type) {
+            super(_name.trim());
+            type = _type.trim();
+            initialValue = "";
+            defaultValue = false;
+        }
+
+        public StxField(Location _left, Location _right, String _name, String _type) {
+            super(_name.trim(), _left, _right);
+            type = _type.trim();
+            initialValue = "";
+            defaultValue = false;
+        }
+
+        /** Primitive types are "Integer" and "Boolean".
+         * Other string are interpreted as datatype names.
+         */
+        public String getType() { return type; }
+
+        public void setType(String _type) { type = _type; }
+
+        public void setInitialValue(String _initialValue) { initialValue = _initialValue; }
+
+        public String getInitialValue() { return initialValue; }
+
+        /** defaultValue = true means that the value is not explicitly set in Avatar.
+         *
+         * Relevant only if initial value is equal to Avatar'initial value for the field's type
+         */
+        public void setDefaultValue(boolean b) { defaultValue = b; }
+
+        /** defaultValue = true means that the value is not explicitly set in Avatar.
+         *
+         * Relevant only if initial value is equal to Avatar'initial value for the field's type
+         */
+        public boolean getDefaultValue() { return defaultValue; }
+    }
+
+    /** Syntactiv Elements associated Structures
+     *
+     * Structures have an ordered list of fields
+     */
+    public static class StxStructure extends StxElement {
+
+        protected MyArray<StxField> fields;
+
+        public StxStructure(String _name, Location _left, Location _right) {
+            super(_name.trim(), _left, _right);
+            fields = new MyArray<StxField>();
+        }
+
+        public StxStructure(String _name) {
+            super(_name.trim());
+            fields = new MyArray<StxField>();
+        }
+
+        /** add a field at the end of the list of fields.
+         *
+         * @param _field the field to add
+         * @return null if success. Otherwise, the field found with same name.
+         */
+        public StxField addField(StxField _field){
+            StxField result = null;
+            for (StxField fld : fields) {
+                if (fld.getName().equals(_field.getName())) {
+                    result = fld;
+                    break;
+                }
+            }
+            if (result == null) fields.add(_field);
+            return result;
+        }
+
+        /** amount of fields */
+        public int getSize() { return fields.size(); }
+
+        public StxField getField(int i) { return fields.get(i);}
+
+        public String getFieldName(int i) { return fields.get(i).getName();}
+
+        public String getFieldType(int i) { return fields.get(i).getType();}
+    }
+
+    /** Syntactic elements associated to Avatar datatype types. */
+    public static class StxDataType extends StxStructure {
+
+        public StxDataType(Location _left, Location _right, String _name) { super(_name, _left, _right); }
+
+        public StxDataType(String _name) { super(_name); }
+    }
+
+    /** Syntactic elements associated to Avatar Relations.
+     *
+     * They are typed communication connections between blocks
+     * that contain channels linking input and output signals */
+    public static class StxRelation extends StxElement {
+        ArrayList<StxChannel> channels;
+        StxBlock block1;
+        StxBlock block2;
+        boolean blocking;
+        boolean lossy;
+        boolean isprivate;
+        int sizeOfFIFO;
+        boolean asynchronous;
+
+        public StxRelation(String _name, Location _left, Location _right) {
+            super(_name.trim(), _left, _right);
+            channels = new ArrayList<StxChannel>();
+            isprivate = false;
+            lossy = false;
+            String block1 = null;
+            String block2 = null;
+        }
+
+        public StxRelation(String _name) {
+            super(_name.trim());
+            channels = new ArrayList<StxChannel>();
+            isprivate = false;
+            lossy = false;
+            String block1 = null;
+            String block2 = null;
+        }
+
+        public void setBlock1(StxBlock _block) { block1 = _block; }
+
+        public void setBlock2(StxBlock _block) { block2 = _block; }
+
+        public void setBlocking(Boolean _b) { blocking = _b; }
+
+        public void setPrivate(Boolean _b) { isprivate = _b; }
+
+        public void setLossy(Boolean _b) { lossy = _b; }
+
+        public void setFifoSize(int _size) { sizeOfFIFO = _size; }
+
+        public void setAsynchronous(boolean _b) { asynchronous = _b; }
+
+        public void addChannel(StxChannel ch) { channels.add(ch); }
+
+        public StxBlock getBlock1() { return block1; }
+
+        public StxBlock getBlock2() { return block2; }
+
+        public Boolean getBlocking() { return blocking; }
+
+        public Boolean getPrivate() { return isprivate; }
+
+        public Boolean getLossy() { return lossy; }
+
+        public int getFifoSize() { return sizeOfFIFO; }
+
+        public boolean getAsynchronous() { return asynchronous; }
+
+        public int getSize() { return channels.size(); }
+
+        public StxChannel getChannel(int i) { return channels.get(i); }
+    }
+
+    /** Syntactic elements associated to Avatar methods.
+     *
+     * Fields of structure correspond to the method's input profile.  */
+    public static class StxMethod extends StxStructure {
+
+        private String returnType;
+
+        public StxMethod(Location _left, Location _right, String _name) { super(_name, _left, _right); returnType = null; }
+
+        public StxMethod(String _name) { super(_name); returnType = null; }
+
+        public String getReturnType() { return returnType; }
+
+        public void setReturnType(String _s) { returnType = _s; }
+    }
+
+    /** Syntactic elements associated to Avatar attributes of blocks.
+     *
+     * defaultValue = true means that the initial value is not explicitly set.
+     * It is ignored if the initial value is not the Avatar default one.
+     */
+    public static class StxAttribute extends StxElement {
+        private String type;
+        private String init;
+        private boolean defaultValue;
+
+        public StxAttribute(String _name, Location _left, Location _right, String _type){
+            super(_name.trim(), _left, _right);
+            type = _type;
+            init = "";
+            defaultValue = false;
+        }
+
+        public StxAttribute(String _name, String _type){
+            super(_name.trim());
+            type = _type;
+            init = "";
+            defaultValue = false;
+        }
+
+        public String getType() { return type; }
+
+        public void setInit(String _s) { init = _s; }
+
+        /** defaultValue = true means that the initial value is not explicitly set.
+        * It is ignored if the initial value is not the Avatar default one.
+        */
+        public void setDefaultValue(boolean b) { defaultValue = b; }
+
+        public String getInit() { return init; }
+
+        /** defaultValue = true means that the initial value is not explicitly set.
+        * It is ignored if the initial value is not the Avatar default one.
+        */
+        public boolean getDefaultValue() { return defaultValue; }
+   }
+
+    /** Syntactic elements associated to Avatar Timers, among attributes */
+    public static class StxTimer extends StxAttribute {
+
+        public StxTimer( String _name, Location _left, Location _right){ super(_name, _left, _right, ""); }
+
+        public StxTimer(String _name){ super(_name, ""); }
+    }
+
+    /** Syntactic elements associated to Avatar  Blocks.
+     *
+     * (technical) Transitions are contained in their source state.
+     * Names of constants, attributes, methods, signals and timers
+     * must be different. */
+    public static class StxBlock extends StxElement {
+        StxBlock father = null;
+        ArrayList<StxAttribute> attributes;
+        ArrayList<StxAttribute> constants;
+        ArrayList<StxMethod> methods;
+        ArrayList<StxSignal> signals;
+        ArrayList<StxTimer> timers;
+        StxState[] states;
+
+        public StxBlock(String _name, Location _left, Location _right) {
+            super(_name, _left, _right);
+            father = null;
+            attributes = new ArrayList<StxAttribute>();
+            constants = new ArrayList<StxAttribute>();
+            methods = new ArrayList<StxMethod>();
+            signals = new ArrayList<StxSignal>();
+            timers = new ArrayList<StxTimer>();
+        }
+
+        public StxBlock(String _name) {
+            super(_name);
+            father = null;
+            attributes = new ArrayList<StxAttribute>();
+            constants = new ArrayList<StxAttribute>();
+            methods = new ArrayList<StxMethod>();
+            signals = new ArrayList<StxSignal>();
+            timers = new ArrayList<StxTimer>();
+        }
+
+        public void setFather(StxBlock _father) { father = _father; }
+
+        public StxState[] getStates() { return states; }
+
+        public void setStates(StxState[] l) { states = l; }
+
+        /** Add an attribute (at the end: order respected)
+         * @param a the attribute to add
+         * @return null in case of success. Otherwise, the found element with same name.
+         */
+        public StxElement addAttribute(StxAttribute a){
+            for (StxSignal sig : signals) if (sig.getName().equals(a.getName())) return sig;
+            for (StxAttribute att : constants) if (att.getName().equals(a.getName())) return att;
+            for (StxAttribute att : attributes) if (att.getName().equals(a.getName())) return att;
+            for (StxAttribute att : timers) if (att.getName().equals(a.getName())) return att;
+            for (StxMethod mth : methods) if (mth.getName().equals(a.getName())) return mth;
+            attributes.add(a);
+            return null;
+        }
+
+         /** Add a constant (at the end: order respected)
+         * @param a the constant to add
+         * @return null in case of success. Otherwise, the found element with same name.
+         */
+        public StxElement addConstant(StxAttribute a){
+            for (StxSignal sig : signals) if (sig.getName().equals(a.getName())) return sig;
+            for (StxAttribute att : constants) if (att.getName().equals(a.getName())) return att;
+            for (StxAttribute att : attributes) if (att.getName().equals(a.getName())) return att;
+            for (StxAttribute att : timers) if (att.getName().equals(a.getName())) return att;
+            for (StxMethod mth : methods) if (mth.getName().equals(a.getName())) return mth;
+            constants.add(a);
+            return null;
+        }
+
+        /** Add a method (at the end)
+        * @param m the method to add
+        * @return null in case of success. Otherwise, the found element with same name.
+        */
+        public StxElement addMethod(StxMethod m){
+            for (StxSignal sig : signals) if (sig.getName().equals(m.getName())) return sig;
+            for (StxAttribute att : constants) if (att.getName().equals(m.getName())) return att;
+            for (StxAttribute att : attributes) if (att.getName().equals(m.getName())) return att;
+            for (StxAttribute att : timers) if (att.getName().equals(m.getName())) return att;
+            for (StxMethod mth : methods) if (mth.getName().equals(m.getName())) return mth;
+            methods.add(m);
+            return null;
+        }
+
+        /** Add a signal (at the end)
+         * @param s the signal to add
+         * @return null in case of success. Otherwise, the found element with same name.
+         */
+        public StxElement addSignal(StxSignal s){
+            for (StxSignal sig : signals) if (sig.getName().equals(s.getName())) return sig;
+            for (StxAttribute att : constants) if (att.getName().equals(s.getName())) return att;
+            for (StxAttribute att : attributes) if (att.getName().equals(s.getName())) return att;
+            for (StxAttribute att : timers) if (att.getName().equals(s.getName())) return att;
+            for (StxMethod mth : methods) if (mth.getName().equals(s.getName())) return mth;
+            signals.add(s);
+            return null;
+        }
+
+        /** Add a timer (at the end)
+        * @param t the timer to add
+        * @return null in case of success. Otherwise, the found element with same name.
+        */
+        public StxElement addTimer(StxTimer t){
+            for (StxSignal sig : signals) if (sig.getName().equals(t.getName())) return sig;
+            for (StxAttribute att : constants) if (att.getName().equals(t.getName())) return att;
+            for (StxAttribute att : attributes) if (att.getName().equals(t.getName())) return att;
+            for (StxAttribute att : timers) if (att.getName().equals(t.getName())) return att;
+            for (StxMethod mth : methods) if (mth.getName().equals(t.getName())) return mth;
+            timers.add(t);
+            return null;
+        }
+
+        /** @return the containing block (null if none)
+         */
+        public StxBlock getFather() { return father; }
+
+        public int getNbAttributes() { return attributes.size(); }
+
+        public int getNbConstants() { return constants.size(); }
+
+        public int getNbMethods() { return methods.size(); }
+
+        public int getNbSignals() { return signals.size(); }
+
+        public int getNbTimers() { return timers.size(); }
+
+        public StxAttribute getAttribute(int i) { return attributes.get(i); }
+
+        public StxAttribute getConstant(int i) { return constants.get(i); }
+
+        public StxMethod getMethod(int i) { return methods.get(i); }
+
+        public StxSignal getSignal(int i) { return signals.get(i); }
+        public StxTimer getTimer(int i) { return timers.get(i); }
+    }
+
+    /** Syntactic elements associated to Avatar signal connections (in Relations) **/
+    public static class StxChannel extends StxElement {
+
+        private StxInMessage inProfile; // typing the connected  input signal
+        private StxOutMessage outProfile; // typing the connected  output signal
+        private String blockA; // block of signalA
+        private StxSignal signalA; // one of the connected signals
+        private String blockB; // block of signalB
+        private StxSignal signalB; // the other connected signals
+
+        public StxChannel(String _name, Location _left, Location _right){
+            super(_name, _left, _right);
+            inProfile = null;
+            outProfile = null;
+            blockA = null;
+            blockB = null;
+            signalA = null;
+            signalB = null;
+        }
+
+        public StxChannel(String _name){
+            super(_name);
+            inProfile = null;
+            outProfile = null;
+            blockA = null;
+            blockB = null;
+            signalA = null;
+            signalB = null;
+        }
+
+        public void setInProfile(StxInMessage m) { inProfile = m; }
+
+        public void setOutProfile(StxOutMessage m) { outProfile = m; }
+
+        /** Set one of the connected signals.
+         *
+         * To be used twice: does nothing if both signals are set.
+         * @param _block the bloc of the signal to set
+         * @param s the signal to set
+         */
+        public void setSignal(String _block, StxSignal s) {
+            if (signalA == null) { blockA = _block; signalA = s; }
+            else if (signalB == null) { blockB = _block; signalB = s; }
+        }
+
+        /** commute signals so that signalA is the signal of the parameter block
+         *
+         * If possible... Usefull to respect block order in relations.
+         * @param _block1 the block to which signalA is expected to belong
+         */
+        public void commuteSignals(String _block1) {
+            boolean permut =
+                    (blockB != null && blockB.equals(_block1)) || (blockA != null && ! blockA.equals(_block1));
+            if (permut) {
+                String auxStr = blockA;
+                StxSignal auxSig = signalA;
+                blockA = blockB;
+                signalA = signalB;
+                blockB = auxStr;
+                signalB = auxSig;
+            }
+        }
+
+        public StxInMessage getInProfile() { return inProfile; }
+
+        public StxOutMessage getOutProfile() { return outProfile; }
+
+        public StxSignal getSignalA() { return signalA; }
+
+        public StxSignal getSignalB() { return signalB; }
+
+        public String getBlockA() { return blockA; }
+
+        public String getBlockB() { return blockB; }
+    }
+
+    /** Syntactic elements associated to Avatar Signals */
+    public static class StxSignal extends StxElement {
+
+        private boolean input;
+        private StxChannel channel;
+
+        public StxSignal(String _name, Location _left, Location _right){
+            super(_name, _left, _right);
+        }
+
+        public StxSignal(String _name){
+            super(_name);
+        }
+
+        /** Set signal direction
+         * @param _b true for an input signal
+         */
+        public void setInput(boolean _b) { input = _b; }
+
+        /** set the channel that connects the signal
+         *
+         * @param _c the channel (connection belonging to a relation)
+         */
+        public void setChannel(StxChannel _c) { channel = _c; }
+
+        /** get the channel of the signal **/
+        public StxChannel getChannel() { return channel; }
+
+        /** signal direction
+         *
+         * @return true for receiving signals, false for sending
+         */
+       public boolean isInput() { return input; }
+    }
+
+    /** Syntactic elements associated to receiving signal profiles.
+     *
+     *  A profile is associated to one single signal (through an associated channel) */
+    public static class StxInMessage extends StxStructure {
+
+        protected StxChannel channel;
+
+        public StxInMessage(String _name, Location _left, Location _right) { super(_name, _left, _right); }
+
+
+        public StxInMessage(String _name) { super(_name); }
+
+        /** Set the channel connecting the associated signal */
+        public void setChannel(StxChannel c) {channel = c; }
+
+        /** get the index of a field/parameter
+         *
+         * @return the index, or -1 if not found */
+        public int indexOf(String s) {
+            int i = 0;
+            for (StxField f : fields) {
+                if (f.getName().equals(s)) break;
+                i++;
+            }
+            if (i == fields.size()) return -1;
+            return i;
+        }
+    }
+
+    /** Syntactic elements associated to sending signal profiles */
+    public static class StxOutMessage extends StxInMessage {
+
+        private StxInMessage inMessage; // associated input profile
+        private HashMap<StxField,String> fieldMap; // maps parameters/fields to associated names in input profile
+
+        public StxOutMessage(String _name, Location _left, Location _right, StxInMessage _inMessage) {
+            super(_name, _left, _right);
+            inMessage = _inMessage;
+            fieldMap = new HashMap<StxField,String>();
+        }
+
+        public StxOutMessage(String _name, StxInMessage _inMessage) {
+            super(_name);
+            inMessage = _inMessage;
+            fieldMap = new HashMap<StxField,String>();
+        }
+
+        /** Associate an input field name to an output field */
+        public boolean addFieldLink(StxField outField, String inField){
+            String test = fieldMap.get(outField);
+            if (test == null) {
+                fieldMap.put(outField, inField);
+                return true;
+            }
+            return false;
+        }
+
+
+        /** to complete the output profile using infos from the associated input profile
+         *
+         * Applied to fieldMap which links both profiles. Used to set the type and the order
+         *  (thus the relevant order is the one in the declaration of the input profile)
+         */
+
+        private class Complete implements BiConsumer<StxField, String> {
+            List<AvatarFromSysMLError> errors; // to put encountered errors
+            private boolean[] inProfile; // to verify that all input fields have been handled at the end
+
+            public boolean[] getInProfile() { return inProfile; }
+
+            public Complete(List<AvatarFromSysMLError> l){
+                errors = l;
+                inProfile = new boolean[inMessage.getSize()];
+                for (int i = 0; i < inMessage.getSize(); i++) { inProfile[i] = false; }
+            };
+
+            public void accept(StxField o, String i) {
+                int index = inMessage.indexOf(i);
+                if ( index == -1) {
+                    errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, o.getLeft(),"Field " +
+                            o.getName() + " of out-message is " +
+                            "associated to a field (" + i + ") in in-message that does not exist", inMessage.getLeft()));
+                }
+                else {
+                    inProfile[index] = true; // input field handled
+                    o.setType(inMessage.fields.get(index).getType()); // set type
+                    fields.set(index, o); // respects input order
+                }
+            }
+        }
+
+        /** to complete the output profile (and some other data) using infos from the associated input profile.
+         *
+         *  Builds field list. Get types and fields order from associated input profile.
+         *  (thus the relevant order is the one in the declaration of the input profile)
+         *
+         *  Also updates some other data in associated components (channel,...)
+         *  To be run after Parsing for a consistent abstract syntax tree/model
+         */
+        public void complete(List<AvatarFromSysMLError> errors) {
+            if (inMessage == null)
+                if (errors != null) {
+                    errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, getLeft(),
+                            "in-message associated to out-message has not been set",null));
+                    return;
+                }
+            // error case or default: missing fields -> copy input fields.
+            if (fieldMap.isEmpty()) for (StxField f: inMessage.fields) fields.add(f);
+            else {
+                Complete cmp = new Complete(errors);
+                fieldMap.forEach(cmp); // handle fields
+                boolean[] inProfile = cmp.getInProfile();
+                for(int i =0; i < inProfile.length; i++) { // verify that no input field is missing
+                    if (!inProfile[i]) {
+                        errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, getLeft(),
+                                "out-message has no field associated to in-message field " + inMessage.getFieldName(i) + " --> field added",
+                                inMessage.getLeft()));
+                        // for consistency, to avoid some redoundant error messages later.
+                        fields.set(i, new StxField(inMessage.getFieldName(i), inMessage.getFieldType(i)));
+                    }
+                }
+            }
+
+            channel = inMessage.channel; // set Channel
+            if (channel == null)
+                if (errors != null) {
+                    errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, getLeft(),
+                            "Channel of in-message associated to out-message has not been set",
+                            inMessage.getLeft()));
+                return;
+            }
+            channel.setOutProfile(this); //update channel
+            if (channel.getSignalA() == null)
+                if (errors != null) {
+                    errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, getLeft(),
+                            "Channel of in-message associated to out-message has not associated signal",
+                            channel.getLeft()));
+                    return;
+            }
+            channel.getSignalA().setChannel(channel); // complete one signal
+            if (channel.getSignalB() == null)
+                if (errors != null) {
+                    errors.add(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, getLeft(),
+                            "Channel of in-message associated to out-message has only one associated signal",
+                            channel.getLeft()));
+                    return;
+            }
+            channel.getSignalB().setChannel(channel); // complete the other signal
+        }
+    }
+
+    /** Syntactic elements associated to "boxes" of state-machines (states,communications,...) */
+    public static class StxState extends StxElement {
+        private byte type; // box kind
+        private StxSignal signal; // for count (Avatar QueryOnSignal=
+        private String variable; // for count and random
+        private String minValue; // for random
+        private String maxValue; // for random
+        private MyArray<StxTransition>  transitions; // outgoing transitions
+
+        public StxState(String _name) {
+            super(_name);
+            type = -1;
+            signal = null;
+            variable = null;
+            minValue = null;
+            maxValue = null;
+            transitions = new MyArray<StxTransition>();
+        }
+
+        public byte getType() { return type; };
+
+        public void setType(byte _b) { type = _b; };
+
+        public StxSignal getSignal() { return signal; };
+
+        public void setSignal(StxSignal _s) { signal = _s; };
+
+        public String getVariable() { return variable; };
+
+        public void setVariable(String _s) { variable = _s; };
+
+        public String getMinValue() { return minValue; };
+
+        public void setMinValue(String _s) { minValue = _s; };
+
+        public String getMaxValue() { return maxValue; };
+
+        public void setMaxValue(String _s) { maxValue = _s; };
+
+        public List<StxTransition> getTransitions() { return transitions; }
+
+        public StxTransition getTransition(int i) {
+            if (i<0) return null;
+            StxTransition result = transitions.get(i);
+            if (result == null) {
+                result = new StxTransition(i);
+                transitions.set(i,result);
+            }
+            return result;
+        }
+    }
+
+    /** Syntactic elements associated to transitions of state-machines.
+     *
+     *  some information associated to these transition is finally associated
+     *  to their target state-machine "boxes" in Avatar model, in particular
+     *  signal and timer information.
+     */
+    public static class StxTransition extends StxElement {
+
+        private byte type; // kind : ordinary, sending, ...
+        private final int index; // from sysML Model, yet useless for Avatar ...?
+        private String guard; // for all transitions
+        private String signalName; // for sending and receiveving transitions
+        private String blockName;  // block of the containing state-machine (technical)
+        private StxSignal signal; // for sending and receiveving transitions, set from signalName, once parsing is completed.
+        private String timer; // for timer operation transitions
+        private ArrayList<StxTerm> sendPayload;  // for sending transitions
+        private HashMap<String,String> receivePayload; // for receiving transitions
+        private String minDelay; // for all transitions
+        private String maxDelay; // for all transitions
+        private double probability; // for all transitions
+        private String delayDistributionLaw; // for all transitions
+        private HashMap<String,String> delayExtra; // for all transitions
+        private StxState target; // for all transitions
+        private ArrayList<StxAction> actions; // for standard transitions (no communication & no timer)
+        private Location rleft; // location of associated request in source state
+        private Location rright; // location of associated request in source state
+        private boolean requested; // set when associated request is parsed;
+
+        public StxTransition(int _index){
+            super("transition_" + _index);
+            type = -1;
+            index = _index;
+            guard = null;
+            signal = null;
+            sendPayload = null;
+            receivePayload = null;
+            minDelay = "";
+            maxDelay = "";
+            delayDistributionLaw = null;
+            delayExtra = null;
+            target = null;
+            actions = new ArrayList<StxAction>();
+            rleft = defaultLocation;
+            rright = defaultLocation;
+            requested = false;
+            probability = AvatarTransition.DEFAULT_PROBABILITY;
+        }
+
+        public void setType(byte _t) { type = _t; };
+
+        public void setGuard(String _s) { guard = _s; }
+
+        public void setSignal(StxSignal _s) { signal = _s; }
+
+        public void setSignalName(String _blockname, String _signalName) {
+            signalName  = _signalName; blockName = _blockname;
+        }
+
+        public void setSendPayload(ArrayList<StxTerm> _p) { sendPayload = _p; }
+
+        public void setReceivePayload(HashMap<String,String> _p) { receivePayload = _p; }
+
+        public void setTimer(String _s) { timer = _s; }
+
+        public void setMinDelay(String _s) { minDelay = _s; }
+
+        public void setMaxDelay(String _s) { maxDelay = _s; }
+
+        public void setProbability(double _p) { probability = _p; }
+
+        public void setDelayDistributionLaw(String _s) { delayDistributionLaw = _s; }
+
+        public void setDelayExtra(HashMap<String,String> _m) { delayExtra = _m; }
+
+        public void setTarget(StxState _s) { target = _s; }
+
+        public void setActions(ArrayList<StxAction> _a) { actions = _a; }
+
+        /** location of associated request in source state */
+        public void setRleft(Location _l) { rleft = _l; }
+
+        /** location of associated request in source state */
+        public void setRright(Location _l) { rright = _l; }
+
+        /** to set when associated request is parsed */
+        public void setRequested(boolean _b) { requested = _b; }
+
+        public byte getType() { return type; }
+
+        public int getIndex() { return index; }
+
+        public String getGuard() { return guard; }
+
+        public String getTimer() { return timer; }
+
+        public StxSignal getSignal() { return signal; }
+
+        public String getSignalName() { return signalName; }
+
+        public String getBlockName() { return blockName; }
+
+        public ArrayList<StxTerm> getSendPayload() { return sendPayload; }
+
+        public HashMap<String, String> getReceivePayload() { return receivePayload; }
+
+        public String getMinDelay() { return minDelay; }
+
+        public String getMaxDelay() { return maxDelay; }
+
+        public double getProbability() { return probability; }
+
+        public String getDelayDistributionLaw() { return delayDistributionLaw; }
+
+
+        public HashMap<String,String> getDelayExtra() { return delayExtra; }
+
+        public StxState getTarget() { return target; }
+
+        public ArrayList<StxAction> getActions() { return actions; }
+
+        /** location of associated request in source state */
+        public Location getRleft() { return rleft; }
+
+        /** location of associated request in source state */
+
+        public Location getRright() { return rright; }
+
+        /** test if associated request is parsed */
+        public boolean isRequested() { return requested; }
+    }
+
+    /** Syntactic elements associated to transitions of state-machines.
+     *
+     *  some information associated to these transition is finally associated
+     *  to their target state-machine "boxes" in Avatar model, in particular
+     *  signal and timer information.
+     */
+    public static class StxAction extends StxElement {
+
+        private byte type; // assignment or method call
+        private StxTerm value; // method call or assigned value
+        private String target; // assignad variable
+
+        public StxAction (StxTerm _value) {
+            super("methodCall_" + _value.toString());
+            type = STXMETHODACTION;
+            value = _value;
+        }
+
+        public StxAction (Location _left, Location _right, StxTerm _value) {
+            super("methodCall_" + _value.toString(), _left, _right);
+            type = STXMETHODACTION;
+            value = _value;
+        }
+
+        public StxAction (String _target, StxTerm _value) {
+            super("assignment_" + _target + "<-" + _value.toString() );
+            type = STXASSIGNACTION;
+            value = _value;
+            target = _target;
+        }
+
+         public StxAction (Location _left, Location _right, String _target, StxTerm _value) {
+            super("assignment_" + _target + "<-" + _value.toString(), _left, _right);
+            type = STXASSIGNACTION;
+            value = _value;
+            target = _target;
+        }
+
+        public byte getType() { return type; }
+
+        public StxTerm getValue() { return value; }
+
+        public String getTarget() { return target; }
+    }
+
+    /** syntactic element corresponding to a complete model -- complex Abstract Syntax Tree */
+    public static class StxModel{
+
+        private ArrayList<AvatarFromSysMLError> errors; // error encountered while parsing and finalizing the syntactic model
+        private HashMap<String,StxDataType> dataTypeMap;
+        private HashMap<String,StxRelation> relationMap;
+        private HashMap<String,StxChannel> channelMap;
+        private HashMap<String,StxBlock> blockMap;
+        private HashMap<String,StxSignal> signalMap;
+
+        /** parameters are the ones filled by the associated parser.
+         *
+         * all parameters are kept as internal attribute except the two last ones that are used for finalization (called by constructor)
+         * @param outMessageMap out messages that require finalization
+         * @param commTransitions transitions that require finalization
+         */
+        public StxModel(
+                ArrayList<AvatarFromSysMLError> _errors,
+                HashMap<String,StxDataType> _dataTypeMap,
+                HashMap<String,StxRelation> _relationMap,
+                HashMap<String,StxChannel> _channelMap,
+                HashMap<String,StxBlock> _blockMap,
+                HashMap<String,StxSignal> _signalMap,
+                HashMap<String, StxOutMessage> outMessageMap,
+                List<StxTransition> commTransitions
+        ) {
+            errors = _errors;
+            dataTypeMap = _dataTypeMap;
+            relationMap = _relationMap;
+            channelMap = _channelMap;
+            blockMap = _blockMap;
+            signalMap = _signalMap;
+            this.finalize(outMessageMap, commTransitions);
+        }
+
+        public ArrayList<AvatarFromSysMLError> getErrors() { return errors; }
+
+        public HashMap<String,StxDataType> getDataTypeMap() { return dataTypeMap; }
+
+        public HashMap<String,StxRelation> getRelationMap() { return relationMap; }
+
+        public HashMap<String,StxChannel> getChannelMap() { return channelMap; }
+
+        public HashMap<String,StxBlock> getBlockMap() { return blockMap; }
+
+        public HashMap<String,StxSignal> getSignalMap() { return signalMap; }
+
+        /** complete Signal information
+         *
+         * Find signals associated to signal names in transitions */
+        private void updateSignal(StxTransition st) {
+            String name = st.getSignalName();
+            StxBlock blk = blockMap.get(st.getBlockName());
+            while (blk != null) {
+                int size = blk.getNbSignals();
+                int i;
+                for (i = 0; i < size; i++) {
+                    StxSignal s = blk.getSignal(i);
+                    if (s.getName().equals(name)) {
+                        st.setSignal(s);
+                        break;
+                    }
+                }
+                if (i < size) blk = null;
+                else blk = blk.getFather();
+            }
+        }
+
+        private class CompleteOutMessage implements BiConsumer<String, StxOutMessage> {
+            public CompleteOutMessage(){}
+            public void accept(String s, StxOutMessage o) { o.complete(errors); }
+        }
+
+        /** complete OutMessage related information.
+         *
+         * Run completion algorithm provided by OutMessage class: set missing links between channels, signals and profiles.
+         */
+        public void finalize(HashMap<String, StxOutMessage> outMessageMap, List<StxTransition> commTransitions) {
+            outMessageMap.forEach(new CompleteOutMessage());
+            for(StxTransition st: commTransitions) updateSignal(st);
+        }
+    }
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/Avatar2SysMLLexer.jflex b/src/main/java/avatartranslator/tosysmlv2/javacup/Avatar2SysMLLexer.jflex
new file mode 100644
index 0000000000000000000000000000000000000000..613045c084b9adbcac39de5e3a381ae23872dcc3
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/Avatar2SysMLLexer.jflex
@@ -0,0 +1,92 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.tosysmlv2;
+import java_cup.runtime.*;
+
+%%
+%class LexerClassName
+%public
+%unicode
+%cup
+%eofval{
+   return new java_cup.runtime.Symbol(#Symb.EOF);
+%eofval}
+
+%yylexthrow Exception
+
+%{
+
+%}
+
+Space = [\ \n\r\t\f]
+Natural = 0 | [1-9][0-9]*
+Identifier = [a-zA-Z_][a-zA-Z0-9_\.]*
+
+%%
+
+<YYINITIAL> {
+ {Space}        { break; }
+ "true"         { return new Symbol(#Symb.CONSTANT, "true"); }
+ "false"        { return new Symbol(#Symb.CONSTANT, "false"); }
+ {Natural}      { try { return new Symbol(#Symb.CONSTANT, "" + Integer.parseInt(yytext()));}
+                  catch (NumberFormatException nfe) { throw new Exception ("Lexer : Integer Format : " + yytext()); }
+                }
+ "+"            { return new Symbol(#Symb.PLUS); }
+ "-"            { return new Symbol(#Symb.MINUS); }
+ "*"            { return new Symbol(#Symb.MULT); }
+ "/"            { return new Symbol(#Symb.DIV); }
+ "%"            { return new Symbol(#Symb.MOD); }
+ "&&"           { return new Symbol(#Symb.AND); }
+ "and"          { return new Symbol(#Symb.AND); }
+ "||"           { return new Symbol(#Symb.OR); }
+ "or"           { return new Symbol(#Symb.OR); }
+ "!"            { return new Symbol(#Symb.NOT); }
+ "not"          { return new Symbol(#Symb.NOT); }
+ "=="           { return new Symbol(#Symb.EQ); }
+ "!="           { return new Symbol(#Symb.DIF); }
+ "<"            { return new Symbol(#Symb.LT); }
+ ">"            { return new Symbol(#Symb.GT); }
+ "<="           { return new Symbol(#Symb.LEQ); }
+ ">="           { return new Symbol(#Symb.GEQ); }
+ "("            { return new Symbol(#Symb.LPAR); }
+ ")"            { return new Symbol(#Symb.RPAR); }
+ ","            { return new Symbol(#Symb.COMMA); }
+ {Identifier}   { return new Symbol(#Symb.IDENT, yytext()); }
+ . { throw new Exception ("Unknown character in  expression"); }
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/Avatar2SysMLParser.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/Avatar2SysMLParser.jcup
new file mode 100644
index 0000000000000000000000000000000000000000..a556fbfd0627413071a7e9923fac8c766e7c3ce9
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/Avatar2SysMLParser.jcup
@@ -0,0 +1,93 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.tosysmlv2;
+import java_cup.runtime.*;
+import static avatartranslator.tosysmlv2.Avatar2SysMLNames.*;
+
+parser code {:
+:}
+
+
+/* Terminals (tokens returned by the scanner). */
+terminal            PLUS, MINUS, MULT, DIV, MOD, AND, OR, EQ, DIF, LT, GT, LEQ, GEQ;
+terminal            NOT, LPAR, RPAR, UMINUS, COMMA;
+terminal String     IDENT, CONSTANT;
+
+
+/* Non terminals */
+non terminal String expr, exprlist;
+
+/* Precedences (probably useless for the current grammar) */
+precedence left OR;
+precedence left AND;
+precedence left NOT;
+precedence left EQ, DIF;
+precedence nonassoc GT, LT, LEQ, GEQ;
+precedence left PLUS, MINUS;
+precedence left MULT, DIV, MOD;
+precedence left UMINUS;
+
+
+/* The grammar */
+expr    ::=
+     expr:l PLUS expr:r {: RESULT = l + " + " + r; :}
+   | expr:l MINUS expr:r {: RESULT = l + " - " + r; :}
+   | expr:l MULT expr:r {: RESULT = l + " * " + r; :}
+   | expr:l DIV expr:r {: RESULT = l + " / " + r; :}
+   | expr:l MOD expr:r {: RESULT = l + " % " + r; :}
+   | MINUS expr:e {: RESULT = "-" + e; :} %prec UMINUS
+   | expr:l OR expr:r {: RESULT = l + " or " + r; :}
+   | expr:l AND expr:r {: RESULT = l + " and " + r; :}
+   | NOT expr:e {: RESULT = "not " + e; :}
+   | expr:l LT expr:r {: RESULT = l + " < " + r; :}
+   | expr:l GT expr:r {: RESULT = l + " > " + r; :}
+   | expr:l LEQ expr:r {: RESULT = l + " <= " + r; :}
+   | expr:l GEQ expr:r {: RESULT = l + " >= " + r; :}
+   | expr:l EQ expr:r {: RESULT = l + " == " + r; :}
+   | expr:l DIF expr:r {: RESULT = l + " != " + r; :}
+   | LPAR expr:e RPAR {: RESULT = "(" + e + ")"; :}
+   | IDENT:i LPAR RPAR {: RESULT = methodSysMLname(i) + "()"; :}
+   | IDENT:i LPAR exprlist:l RPAR {: RESULT = methodSysMLname(i) + "(" + l + ")"; :}
+   | CONSTANT:e {: RESULT = e; :}
+   | IDENT:e {: RESULT = attributeSysMLname(e); :}
+;
+exprlist ::=
+    expr:e  {: RESULT = e; :}
+   | expr:e COMMA exprlist:l {: RESULT = e + ", " + l; :}
+;
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
new file mode 100644
index 0000000000000000000000000000000000000000..541c6ea720265d0edf4e35210477779f4d2b2656
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
@@ -0,0 +1,2123 @@
+ /* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+package avatartranslator.tosysmlv2;
+import java_cup.runtime.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*;
+import java.util.function.BiConsumer;
+import static java.lang.System.out;
+
+parser code {:
+    // %%%%%%%%%%%%%%%%%%% BEGINNING OF USER CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    /** Parse the current buffer and returns the abstract syntax tree (AST) of the described specification.
+     *
+     * <p> At the end of parsing, the true AST components are in variables dataTypeMap, relationMap, channelMap,
+     * blockMap and signalMap. The invoked AST constructor (StxModel) also receives some other parameters: the
+     * list of errors encountered while parsing and some information it uses in a post-processing that finalizes
+     * the AST structure (complete some fields).
+     */
+
+    // %%%%%%%%%%%%%%%%%%%%%%%%%%% MAIN FUNCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    public StxModel parseModel() {
+        try {
+            parse();
+            return new StxModel(errors,dataTypeMap,relationMap,channelMap,blockMap,signalMap,outMessageMap,commTransitions);
+        }
+        catch (java.lang.Exception e) {
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, lexer.getErrorLocation(), e.getMessage()));
+            return new StxModel(errors,dataTypeMap,relationMap,channelMap,blockMap,signalMap,outMessageMap,commTransitions);
+        }
+    }
+
+    // %%%%%%%%%%%%%%%%%%%%%%%%%%% IMPLEMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    // %%%%%%%%%%%%% LEXER
+
+    /** to make lexer access easier */
+    private LexerClassName lexer = (LexerClassName) getScanner();
+
+    // %%%%%%%%%%%%%% ERROR HANDLING
+
+    /** to handle errors encountered while parsing */
+    private ArrayList<AvatarFromSysMLError> errors;
+    /** register an error */
+    private void addError(AvatarFromSysMLError _err) { errors.add(_err); }
+    /** get encountered errors */
+    public ArrayList<AvatarFromSysMLError> getErrors() { return errors; }
+
+    // %%%%%%%%%%%%%%%%%% INITIALIZE
+
+    @Override
+    public void user_init() {
+        errors = new ArrayList<AvatarFromSysMLError>();
+        dataTypeMap = new HashMap<String,StxDataType>();
+        relationMap = new HashMap<String,StxRelation>();
+        channelMap = new HashMap<String,StxChannel>();
+        blockMap = new HashMap<String,StxBlock>();
+        signalMap = new HashMap<String,StxSignal>();
+        inMessageMap = new HashMap<String,StxInMessage>();
+        outMessageMap = new HashMap<String,StxOutMessage>();
+        blockHierarchy = new ArrayList<StxBlock>();
+        attributeHierarchy = new ArrayList<HashMap<String,StxAttribute>>();
+        methodHierarchy = new ArrayList<HashMap<String,StxMethod>>();
+        commTransitions = new ArrayList<StxTransition>();
+        theBlock = null;
+    }
+
+    // %%%%%%%%%%%%%%%%% GLOBAL STRUCTURES FILLED BY PARSING
+
+    /** datatypes collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxDataType> dataTypeMap;
+    /** relations collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxRelation> relationMap;
+    /** channels collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxChannel> channelMap;
+    /** blocks collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxBlock> blockMap;
+    /** signals collected from SysML source while parsing, to put in final AST */
+    private HashMap<String,StxSignal> signalMap;
+
+    /** signal input profiles collected from SysML source while parsing, internal, technical */
+    private HashMap<String,StxInMessage> inMessageMap; // theStructure
+    /** signal outout profiles collected from SysML source while parsing, to finalize final AST */
+    private HashMap<String,StxOutMessage> outMessageMap;
+
+    /** communication transitions, to finalize final AST. They are collected while parsing as they
+     * require a post-processing after it, when their containing block hierarchy is fully known,
+     * to find their associated signal from its name.
+     */
+    ArrayList<StxTransition> commTransitions;
+
+    /** attributes, one map per block. Technical variable: memorize to avoid duplicates */
+    private HashMap<String,StxAttribute> attributeMap;
+
+    /** methods, one map per block. Technical variable: memorize to avoid duplicates */
+    private HashMap<String,StxMethod> methodMap;
+
+    private StringBuffer stringAcc = new StringBuffer();
+
+    // %%%%%%%%%%%%%%%%%%%% "PATH" STATE VARIABLES
+    // context information for parsing
+    // they locate the current position being parsed in the specification structure
+
+    /** path state variable: current field */
+    private StxField theField;
+    /** path state variable: current input profile or method */
+    private StxStructure theStructure;
+    /** path state variable: current relation */
+    private StxRelation theRelation;
+    /** path state variable: current Channel */
+    private StxChannel theChannel;
+    /** path state variable: current block */
+    private StxBlock theBlock;
+    /** path state variable: current signal */
+    private StxSignal theSignal;
+    /** path state variable: current output profile */
+    private StxOutMessage theOutMessage;
+    /** path state variable: current attribute */
+    private StxAttribute theAttribute;
+    /** path state variable: current state */
+    private StxState theState;
+    /** path state variable: current transition */
+    private StxTransition theTransition;
+    /** path state variable: transition request index
+     *  Idea: thState->transition(requestIndex) correspond to theTransition
+     */
+    private int requestIndex;
+
+    /** current path in block hierarchy, ancestors in order: last element is father of current block. */
+    private ArrayList<StxBlock> blockHierarchy;
+    /** attributes associated to ancestor blocks, respects blockHierarchy order */
+    private ArrayList<HashMap<String,StxAttribute>> attributeHierarchy;
+    /** methods associated to ancestor blocks, respects blockHierarchy order */
+    private ArrayList<HashMap<String,StxMethod>> methodHierarchy;
+    /** to detect multiple state machines in a single block */
+    private Location stateMachine = null;
+    /** state machine flags associated to ancestor blocks, respects blockHierarchy order */
+    private ArrayList<Location> machineHierarchy = new ArrayList<Location>();
+
+    // %%%%%%%%%%%%%%%%%%%% UPDATE PATH STATE VARIABLES
+
+    // ++++++++++++++++ RELATIONS
+
+    /** set current relation. Create-and-Register it if necessary. */
+    private void getRelation(String _name) {
+        theRelation = relationMap.get(_name);
+        if (theRelation == null) {
+            theRelation = new StxRelation(_name);
+            relationMap.put(_name, theRelation);
+        }
+    }
+
+    /** (to avoid duplicates) not null if a block1 parameter has been encountered for current relation */
+    private Location block1ParamFlag;
+    /** (to avoid duplicates) not null if a block2 parameter has been encountered for current relation */
+    private Location block2ParamFlag;
+    /** (to avoid duplicates) not null if a private parameter has been encountered for current relation */
+    private Location privateParamFlag;
+    /** (to avoid duplicates) not null if a maxsize parameter has been encountered for current relation */
+    private Location maxsizeParamFlag;
+    /** (to avoid duplicates) not null if a lossy parameter has been encountered for current relation */
+    private Location lossyParamFlag;
+
+    /** to clear the relevant anti-duplicate flags (locations) at the beginning of a relation parsing */
+    private void clearRelationParams() {
+        block1ParamFlag = null;
+        block2ParamFlag = null;
+        privateParamFlag = null;
+        maxsizeParamFlag = null;
+        lossyParamFlag = null;
+    }
+
+    // ++++++++++++++++ CHANNELS
+
+    /** set current channel. Create-and-Register it if necessary. */
+    private void getChannel(String _name) {
+        theChannel = channelMap.get(_name);
+        if (theChannel == null) {
+            theChannel = new StxChannel(_name);
+            channelMap.put(_name, theChannel);
+        }
+    }
+
+    // ++++++++++++++++ BLOCKS
+
+    /** set current block. Create-and-Register it if necessary. */
+    private void getBlock(String _name) {
+        theBlock = blockMap.get(_name);
+        if (theBlock == null) {
+            theBlock = new StxBlock(_name);
+            blockMap.put(_name, theBlock);
+        }
+    }
+
+    // ++++++++++++++++ SIGNALS
+
+    /** set current signal. Create-and-Register it if necessary. */
+    private void getSignal(String _blockname, String _signalname) {
+        String key = _blockname + "." + _signalname;
+        theSignal = signalMap.get(key);
+        if (theSignal == null) {
+            theSignal = new StxSignal(_signalname);
+            signalMap.put(key, theSignal);
+        }
+    }
+
+    // ++++++++++++++++ INPUT PROFILE
+
+    /** (to avoid duplicates) not null if a message channel parameter has been encountered for current relation */
+    private Location messageChannelParam;
+
+    /** set current in message in theStructure. Create-and-Register it if necessary. */
+    private void getInMessage(String _name) {
+        theStructure = inMessageMap.get(_name);
+        if (theStructure == null) {
+            theStructure = new StxInMessage(_name);
+            inMessageMap.put(_name, (StxInMessage)theStructure);
+        }
+    }
+
+    // ++++++++++++++++ OUTPUT PROFILE
+
+    /** set current out message. Create-and-Register it if necessary. */
+    private void getOutMessage(String _name, StxInMessage _msg) {
+        theOutMessage = outMessageMap.get(_name);
+        if (theOutMessage == null) {
+            theOutMessage = new StxOutMessage(_name, _msg);
+            outMessageMap.put(_name, theOutMessage);
+        }
+    }
+
+    // ++++++++++++++++ ENTER / EXIT BLOCK
+
+    /** enter block: extend path to current block (push blockHierarchy, attributeHierarchy, methodHierarchy) */
+    private void pushBlock() {
+        blockHierarchy.add(theBlock);
+        theBlock = null;
+        attributeHierarchy.add(attributeMap);
+        attributeMap = new HashMap<String,StxAttribute>();
+        methodHierarchy.add(methodMap);
+        methodMap = new HashMap<String,StxMethod>();
+        machineHierarchy.add(stateMachine);
+        stateMachine = null;
+    }
+
+    /** exit block: shorten path to current block (pop blockHierarchy, attributeHierarchy, methodHierarchy) */
+    private void popBlock() {
+        theBlock = blockHierarchy.get(blockHierarchy.size() -1);
+        blockHierarchy.remove(blockHierarchy.size() -1);
+        attributeMap = attributeHierarchy.get(attributeHierarchy.size() -1);
+        attributeHierarchy.remove(attributeHierarchy.size() -1);
+        methodMap = methodHierarchy.get(methodHierarchy.size() -1);
+        methodHierarchy.remove(methodHierarchy.size() -1);
+        stateMachine = machineHierarchy.remove(machineHierarchy.size() -1);
+    }
+
+
+
+    /** set current attribute. Create-and-Register it if necessary. */
+    private void getAttribute(String _name, String _type) {
+        theAttribute = attributeMap.get(_name);
+        if (theAttribute == null) {
+            theAttribute = new StxAttribute(_name, _type);
+            attributeMap.put(_name, theAttribute);
+        }
+    }
+
+    /** set current method. Create-and-Register it if necessary. */
+    private void getMethod(String _name) {
+        theStructure = new StxMethod(_name);
+        if (theStructure == null) {
+            theStructure = new StxMethod(_name);
+            methodMap.put(_name, (StxMethod)theStructure);
+        }
+    }
+
+    /** set current state. Create-and-Register it if necessary. */
+    private HashMap<String,StxState> stateMap;
+    private void getState(String _name) {
+        theState = stateMap.get(_name);
+        if (theState == null) {
+            theState = new StxState(_name);
+            stateMap.put(_name, theState);
+        }
+    }
+
+    /** set current transition. Create and register it with current state if necessary */
+    private void getTransition(int _index) {
+        theTransition = theState.getTransition(_index);
+    }
+
+    /** (to avoid duplicates) not null if an index parameter has been encountered for current request */
+    private Location indexArg;
+    /** (to avoid duplicates) not null if a delay parameter has been encountered for current request */
+    private Location delayArg;
+    /** (to avoid duplicates) not null if a channel parameter has been encountered for current request */
+    private Location channelArg;
+    /** (to avoid duplicates) not null if a payload parameter has been encountered for current request */
+    private Location payloadArg;
+    /** (to avoid duplicates) not null if a timer parameter has been encountered for current request */
+    private Location settimerArg;
+    /** (to avoid duplicates) not null if a timer parameter has been encountered for current request */
+    private Location resettimerArg;
+    /** (to avoid duplicates) not null if a timer parameter has been encountered for current request */
+    private Location expiretimerArg;
+
+    private boolean argOK;
+    private void clearRequestArgs() {
+        indexArg = null;
+        delayArg = null;
+        channelArg = null;
+        payloadArg = null;
+        settimerArg = null;
+        resettimerArg = null;
+        expiretimerArg = null;
+    }
+
+    private ArrayList<StxTerm> argList;
+    private ArrayList<StxAction> actionList;
+    private HashMap<String,String> receiveMap;
+    HashMap<String,String> delayExtraMap = null;
+    private StxCall theCall;
+
+    /** (to avoid duplicates) not null if a distribution law attribute has been encountered for current transition labels section */
+    private Location distributionLbl;
+    /** (to avoid duplicates) not null if a weight attribute has been encountered for current transition labels section */
+    private Location weightLbl;
+    /** to clear the relevant anti-duplicate flags (locations) at the beginning of a transition labels section */
+    private void clearTransitionLbls() {
+        distributionLbl = null;
+        weightLbl = null;
+    }
+    private boolean okRequest;
+
+    /** customized error handling, throw exception with message, and location in lexer's errorLocation */
+    public void report_fatal_error(String message, Object info) throws Exception {
+        this.done_parsing();
+        ComplexSymbolFactory.ComplexSymbol cs = (ComplexSymbolFactory.ComplexSymbol)info;
+        lexer.setErrorLocation(cs.getLeft());
+        throw new Exception("parser: syntax error for input symbol \"" + cs.getName() + "\"");
+    }
+    /** customized error handling */
+    public void report_error(String message, Object info) {}
+    /** customized error handling */
+    public void syntax_error(Symbol cur_token) {}
+
+    /** set current transition w.r.t. requestIndex and request it and type it as trivial request (if not already requested) */
+    private void tryTrivialRequest(Location left, Location right) {
+        getTransition(requestIndex);
+        if (theTransition.isRequested()) {
+            addError( new AvatarFromSysMLError(
+                AvatarFromSysMLError.LOWERROR,
+                left,
+                "Transition " + requestIndex + " is already requested",
+                theTransition.getRleft()) );
+        } else {
+            theTransition.setRleft(left);
+            theTransition.setRright(right);
+            theTransition.setRequested(true);
+            theTransition.setType(AvatarFromSysMLSyntax.STXTRIVIALTRANSITION);
+        }
+    }
+
+    /** a multiusage Flag */
+    private boolean flag;
+    /** a block specific flag */
+    private ArrayList<Boolean> blockFlags = new ArrayList<Boolean>();
+    private void pushBlockFlag(Boolean f) { blockFlags.add(f); }
+    private boolean popBlockFlag() {
+        boolean res = blockFlags.get(blockFlags.size() -1);
+        blockFlags.remove(blockFlags.size() -1);
+        return res;
+    }
+
+:}
+
+/* Terminals (tokens returned by the scanner). */
+
+terminal Integer INT;
+terminal Boolean BOOL;
+terminal String STRING, ANYNAME;
+terminal Double REAL;
+
+terminal EQ, LPAR, RPAR, LBRAC, RBRAC, COMMA, SEMICOLON, COLON, POINT, EQUAL, GETS, QUEST;
+
+// Field names
+terminal LOSSY_F, MAXSIZE_F, PRIVATE_F, RELATION_F, BLOCK1_F, BLOCK2_F, POOL_F, REQUEST_F, STATEACTION_F, INDEX_F,
+   DELAY_F,  PAYLOAD_F, CHANNEL_F, VALUE_F, TARGET_F, AMOUNT_U, START_U, DONE_U;
+
+// Communications
+terminal  RELATION_T, SYNCREL_T, BFIFOREL_T, NBFIFOREL_T, INMESSAGE_T, OUTMESSAGE_T, CHANNEL_T, FIFO_T, BFIFO_T,
+    NBFIFO_T, SYNC_T, INSIGNALBINDING_T, OUTSIGNALBINDING_T;
+
+// Transition server
+terminal  NOKREQUEST_U, TRIVIALREQUEST_T, IMMEDIATEREQUEST_U, SENDREQUEST_T, RECEIVEREQUEST_T, MSG_U;
+
+// general
+terminal  ASSIGNMENT_T, BOUNDRANDOM_U, BOOLEAN_T, INTEGER_T, STRING_T, REAL_T;
+
+// Blocks
+terminal  AVDATATYPE_T, AVBLOCK_T, AVVOIDMETHOD_T, AVCALCMETHOD_T, AVSTANDARDSTATE_T, AVSTOPSTATE_T, AVSTARTSTATE_T,
+    AVSENDSTATE_T, AVRECEIVESTATE_T, AVRANDOMSTATE_T, AVCOUNTSTATE_T, AVPRESENDSTATE_T, AVPRERECEIVESTATE_T,
+    AVTRANSITION_T, AVSTATEMACHINE_T, RECEIVEACTION_T, TRANSITIONACTION_T, STATEMACHINE;
+
+// Timers
+terminal  AVSETTIMERSTATE_T, AVRESETTIMERSTATE_T, AVEXPIRETIMERSTATE_T, SETTIMERREQUEST_T, RESETTIMERREQUEST_T,
+    EXPIRETIMERREQUEST_T, TIMERSETMSG_T, TIMERRESETMSG_T, TIMEREXPIREMSG_T, AVTIMER_T, SET_TM,
+    RESET_TM, EXPIRE_TM, DISTRIBUTION_A, WEIGHT_A;
+
+// Typed and untyped identifiers
+terminal Ident IDENT;
+
+// Sysml reserved keywords
+terminal ABOUT, ABSTRACT, ACCEPT, ACTION, ACTOR, AFTER, ALIAS, ALL, ALLOCATE, ALLOCATION, ANALYSIS, AND, AS, ASSERT,
+    ASSIGN, ASSOC, ASSUME, AT, ATTRIBUTE, BIND, BINDING, BLOCK, BY, CALC, CASE, COMMENT, CONCERN, CONNECT, CONNECTION,
+    CONSTRAINT, DECIDE, DEF, DEFAULT, DEFINED, DEPENDENCY, DERIVED, DO, DOC, ELSE, END, ENTRY, ENUM, EVENT, EXHIBIT,
+    EXIT, EXPOSE, FILTER, FIRST, FLOW, FOR, FORK, FRAME, FROM, HASTYPE, IF, IMPLIES, IMPORT, IN, INCLUDE, INDIVIDUAL,
+    INOUT, INTERFACE, ISTYPE, ITEM, JOIN, LANGUAGE, LOOP, MERGE, MESSAGE, METADATA, NONUNIQUE, NOT, OBJECTIVE, OCCURRENCE,
+    OF, OR, ORDERED, OUT, PACKAGE, PARALLEL, PART, PERFORM, PORT, PRIVATE, PROTECTED, PUBLIC, READONLY, REDEFINES, REF,
+    REFERENCES, RENDER, RENDERING, REP, REQUIRE, REQUIREMENT, RETURN, SATISFY, SEND, SNAPSHOT, SPECIALIZES, STAKEHOLDER,
+    STATE, SUBJECT, SUBSETS, SUCCESSION, THEN, TIMESLICE, TO, TRANSITION, UNTIL, USE, VARIANT, VARIATION, VERIFICATION,
+    VERIFY, VIA, VIEW, VIEWPOINT, WHEN, WHILE, XOR, REFINES, NULL;
+
+terminal PLUS, MINUS, MULT, DIV, MOD, DIF, LT, GT, LEQ, GEQ, UMINUS;
+
+/* Non terminals */
+non terminal String typeIdent, fulllIdent;
+non terminal model;
+non terminal featureList, feature, specializes, subsets, blockAlias, blockChain, datatypeDecl, datatypeDeclHEADER,
+    fieldDecls, fieldDecl, relationDecl, syncRelDecl, nbfRelDecl, bfRelDecl, relParams, relParam,
+    block1Param, block2Param, privateParam, maxsizeParam, lossyParam,
+    syncRelDeclBegin, nbfRelDeclBegin, bfRelDeclBegin;
+
+
+non terminal channelDecl, syncChDecl , nbfChDecl, bfChDecl, signalBinding, inSignalBinding, outSignalBinding,
+    messageDecl, inMessageDecl, outMessageDecl, inMessageDeclBODY, messageChannel, outMessageDeclBODY,
+    redefineField, inMessageDeclBegin, outMessageDeclBegin;
+
+non terminal blockDecl, blockDeclBegin, blockDeclBODY, blockItem, attributeDecl, constantDecl, attributeDeclHEADER, methodDecl, voidMethodDecl,
+    calcMethodDecl, calcMethodItems, calcMethodItem, signalDecl, timerDecl, stateMachine, stateMachineItems, stateMachineItem,
+    voidMethodDeclBegin, calcMethodDeclBegin, constantDeclHEADER, fieldDeclBegin, fieldVal;
+
+non terminal state, startState, standardState, stopState, sendState, receiveState, randomState, countState, presendState,
+    prereceiveState, setTimerState, resetTimerState, expireTimerState, poolParam, requestParam, requestList, request,
+    simpleRequest, trivialRequest, requestArgs, requestArg, sendRequest, receiveRequest, setTimerRequest, resetTimerRequest,
+    expireTimerRequest, indexParam, delayParam, delayExpr, actionRandomExpr, delayRandomExpr, payloadParam, channelParam, settimerParam,
+    resettimerParam, expiretimerParam, trivialRequestBegin, sendRequestBegin, receiveRequestBegin, setTimerRequestBegin,
+    resetTimerRequestBegin, expireTimerRequestBegin, startStateBegin, standardStateBegin, stopStateBegin, sendStateBegin,
+    receiveStateBegin, randomStateBegin, countStateBegin, presendStateBegin, prereceiveStateBegin, setTimerStateBegin,
+    resetTimerStateBegin, expireTimerStateBegin, stateMachineBegin, payloadParamBegin;
+
+non terminal randomAction, targetParam, randomParam, countAction, countParam, transition, doActions,
+    actionSeq, act, termList, transitionBegin, transitionLabels, transitionAction, receiveAction, assign,
+    target, fullIdent, transitionActionBegin, receiveActionBegin, messageLine, receiveAssigns, receiveAssignSeq,
+    receiveAssign, transitionLabel, distributionLabel, weightLabel, extraLabel, delayKeyword, dummy;
+
+non terminal StxTerm stxRvalue;
+non terminal StxExpr stxExpr;
+non terminal StxCall stxCall;
+non terminal String iexpr, expr, complexIdent;
+non terminal stxCallBegin, stxCallParam, comma, call, callBegin, stxCallParams;
+
+
+/* Precedences (probably useless for the current grammar) */
+precedence left OR;
+precedence left AND;
+precedence left NOT;
+precedence left EQ, DIF;
+precedence nonassoc GT, LT, LEQ, GEQ;
+precedence left PLUS, MINUS;
+precedence left MULT, DIV, MOD;
+precedence left UMINUS;
+
+model ::=
+      PACKAGE IDENT LBRAC featureList RBRAC
+    | PACKAGE IDENT LBRAC  RBRAC
+;
+
+featureList ::= feature | feature featureList;
+
+feature ::=
+      PRIVATE IMPORT
+    | PUBLIC IMPORT
+    | datatypeDecl
+    | relationDecl
+    | channelDecl
+    | signalBinding
+    | messageDecl
+    | blockDecl
+    | blockAlias
+;
+
+// multi-usage rules %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+typeIdent ::=
+      INTEGER_T {: RESULT = "Integer"; :}
+    | BOOLEAN_T {: RESULT = "Boolean"; :}
+    | IDENT:id  {: RESULT = id.getAvatarName(); :}
+;
+
+specializes ::= SPECIALIZES | REFINES;
+subsets ::= SUBSETS | REFINES;
+
+// BLOCK ALIASES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+blockAlias ::=
+    PART IDENT COLON AVBLOCK_T subsets blockChain EQUAL blockChain SEMICOLON
+;
+blockChain::=
+      IDENT
+    | IDENT POINT blockChain
+;
+
+// DATATYPE DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+
+datatypeDecl ::=
+      datatypeDeclHEADER LBRAC fieldDecls RBRAC:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+    | datatypeDeclHEADER LBRAC  RBRAC:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+;
+datatypeDeclHEADER ::= ATTRIBUTE:a DEF IDENT:id specializes AVDATATYPE_T {:
+    theStructure = dataTypeMap.get(id.getAvatarName());
+    if (theStructure == null) {
+        theStructure = new StxDataType(id.getAvatarName());
+        dataTypeMap.put(id.getAvatarName(), (StxDataType) theStructure);
+    }
+    if (! theStructure.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Datatype " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        theStructure.setLeft(axleft);
+        flag = true;
+    }
+:};
+
+// FIELD LIST $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+//            used for DataTypes, Methods and inMessages (in-signal profiles)
+
+fieldDecls ::= fieldDecl | fieldDecl  fieldDecls
+;
+fieldDecl ::= fieldDeclBegin fieldVal SEMICOLON:q {:
+    theField.setRight(qxright);
+:};
+fieldDeclBegin ::= ATTRIBUTE:a IDENT:id COLON typeIdent:tp {:
+    theField = new StxField(axleft, axright, id.getAvatarName(), tp);
+    StxField clash = theStructure.addField(theField);
+    if (clash != null)  // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, axleft, "Field " + id.getAvatarName() +
+        " is already declared", clash.getLeft()) );
+    theField.setLeft(axleft);
+:};
+fieldVal ::= // may not exist
+    | GETS iexpr:e {:  theField.setInitialValue(e);  :}
+    | DEFAULT GETS iexpr:e {:  theField.setInitialValue(e);  theField.setDefaultValue(true); :}
+;
+
+// RELATION DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+
+relationDecl ::= syncRelDecl | nbfRelDecl | bfRelDecl;
+
+// Synchroneous relations IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+syncRelDecl ::= syncRelDeclBegin relParams RPAR SEMICOLON:x {:
+    if (flag) theRelation.setRight(xxright);
+:};
+syncRelDeclBegin ::=
+    PART:p IDENT:id COLON SYNCREL_T EQUAL SYNCREL_T LPAR {:
+        Location l = idxleft;
+        getRelation(id.getAvatarName());
+        if (! theRelation.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Relation " + id.getAvatarName() +
+            " is already declared", theRelation.getLeft()) );
+            flag = false;
+        } else {
+            theRelation.setAsynchronous(false);
+            theRelation.setLeft(pxleft);
+            flag = true;
+        }
+        clearRelationParams(); // at beginning, no parameter has been parsed
+:};
+
+// Non Blocking FIFO relations IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+nbfRelDecl ::= nbfRelDeclBegin relParams RPAR SEMICOLON:x {:
+    if (flag) theRelation.setRight(xxright);
+:};
+nbfRelDeclBegin ::=
+    PART:p IDENT:id COLON NBFIFOREL_T EQUAL NBFIFOREL_T LPAR {:
+       getRelation(id.getAvatarName());
+        if (! theRelation.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Relation " + id.getAvatarName() +
+            " is already declared", theRelation.getLeft()) );
+            flag = false;
+        } else {
+           theRelation.setAsynchronous(true);
+           theRelation.setBlocking(false);
+           theRelation.setLeft(pxleft);
+           flag = true;
+       }
+       clearRelationParams(); // at beginning, no parameter has been parsed
+:};
+
+// Non Blocking FIFO relations IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+bfRelDecl ::= bfRelDeclBegin relParams RPAR SEMICOLON:x {:
+    if (flag) theRelation.setRight(xxright);
+:};
+bfRelDeclBegin ::=
+    PART:p IDENT:id COLON BFIFOREL_T EQUAL BFIFOREL_T LPAR {:
+        getRelation(id.getAvatarName());
+        if (! theRelation.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Relation " + id.getAvatarName() +
+            " is already declared", theRelation.getLeft()) );
+            flag = false;
+        } else {
+            theRelation.setAsynchronous(true);
+            theRelation.setBlocking(true);
+            theRelation.setLeft(pxleft);
+            flag = true;
+        }
+        clearRelationParams(); // at beginning, no parameter has been parsed
+:};
+
+// Relation Parameters IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+relParams ::= relParam | relParam COMMA relParams;
+relParam ::=
+      block1Param
+    | block2Param
+    | privateParam
+    | maxsizeParam
+    | lossyParam
+;
+block1Param ::= BLOCK1_F:b EQUAL IDENT:id {:
+    if (block1ParamFlag == null) { // param has not yet been parsed
+        StxBlock tmp = theBlock;
+        getBlock(id.getAvatarName());
+        theRelation.setBlock1(theBlock);
+        theBlock = tmp;
+        block1ParamFlag = bxleft; // now, param has been parsed
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,bxleft,"bloc1 is already set\n", block1ParamFlag));
+:};
+block2Param ::= BLOCK2_F:b EQUAL IDENT:id {:
+    if (block2ParamFlag == null) { // param has not yet been parsed
+        StxBlock tmp = theBlock; // save current block
+        getBlock(id.getAvatarName());
+        theRelation.setBlock2(theBlock); // set param
+        theBlock = tmp; // restore current block
+        block2ParamFlag = bxleft; // now, param has been parsed
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, bxleft,"bloc2 is already set\n", block2ParamFlag));
+:};
+privateParam ::= PRIVATE_F:p EQUAL BOOL:b {:
+    if (privateParamFlag == null) { // param has not yet been parsed
+        theRelation.setPrivate(b); // set param
+        privateParamFlag = pxleft; // now, param has been parsed
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, bxleft,"private parameter is already set\n", privateParamFlag));
+:};
+maxsizeParam ::= MAXSIZE_F:z EQUAL INT:i {:
+    if (maxsizeParamFlag == null) { // param has not yet been parsed
+        if (! theRelation.getAsynchronous()) // irrelevant parameter
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, zxleft, "synchroneous relations don't have maxsize parameter\n"));
+        else {
+            theRelation.setFifoSize(i);  // set param
+            maxsizeParamFlag = zxleft; // now, param has been parsed
+        }
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, zxleft, "maxsize is already set\n", maxsizeParamFlag));
+:};
+lossyParam ::= LOSSY_F:z EQUAL BOOL:b {:
+    if (lossyParamFlag == null) { // param has not yet been parsed
+        if (! theRelation.getAsynchronous()) // irrelevant parameter
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, zxleft, "synchroneous relations don't have lossy parameter\n"));
+        else {
+            theRelation.setLossy(b);  // set param
+            lossyParamFlag = zxleft; // now, param has been parsed
+        }
+    } else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING, zxleft, "lossy is already set\n", lossyParamFlag));
+:};
+
+// CHANNEL DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+
+channelDecl ::= syncChDecl | nbfChDecl |bfChDecl;
+
+// Synchroneous Channel IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+syncChDecl ::= PART:p IDENT:id COLON SYNC_T EQUAL SYNC_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON:s {:
+    getRelation(rl.getAvatarName());
+    getChannel(id.getAvatarName());
+    if (! theChannel.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Channel " + id.getAvatarName() +
+        " is already declared", theChannel.getLeft()) );
+    } else {
+        if (theRelation.getAsynchronous()) // incompatible relation and channel types
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,
+                pxleft, "synchroneous channels require a synchroneous relation\n"));
+        theRelation.addChannel(theChannel);
+        theChannel.setLeft(pxleft);
+        theChannel.setRight(sxright);
+    }
+:};
+
+// Non Blocking FIFO Channel IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+nbfChDecl ::= PART:p IDENT:id COLON NBFIFO_T EQUAL NBFIFO_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON:s {:
+    getRelation(rl.getAvatarName());
+    getChannel(id.getAvatarName());
+    if (! theChannel.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Channel " + id.getAvatarName() +
+        " is already declared", theChannel.getLeft()) );
+    } else {
+        if (! theRelation.getAsynchronous()) // incompatible relation and channel types
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,
+                pxleft, "FIFO channels require an asynchroneous relation\n"));
+        theRelation.addChannel(theChannel);
+        theChannel.setLeft(pxleft);
+        theChannel.setRight(sxright);
+    }
+:};
+
+// Non Blocking FIFO Channel IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+
+bfChDecl ::= PART:p IDENT:id COLON BFIFO_T EQUAL BFIFO_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON:s {:
+    getRelation(rl.getAvatarName());
+    getChannel(id.getAvatarName());
+    if (! theChannel.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Channel " + id.getAvatarName() +
+        " is already declared", theChannel.getLeft()) );
+    } else {
+        if (! theRelation.getAsynchronous()) // incompatible relation and channel types
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHWARNING,
+                pxleft, "FIFO channels require an asynchroneous relation\n"));
+        theRelation.addChannel(theChannel);
+        theChannel.setLeft(pxleft);
+        theChannel.setRight(sxright);
+    }
+:};
+
+// SIGNAL BINDING $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+
+signalBinding ::= inSignalBinding | outSignalBinding;
+inSignalBinding ::=
+      BINDING COLON INSIGNALBINDING_T BIND IDENT:b POINT IDENT:s EQUAL IDENT:c SEMICOLON {:
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(true); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+    :}
+    | BINDING COLON INSIGNALBINDING_T BIND IDENT:c EQUAL IDENT:b POINT IDENT:s SEMICOLON {:
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(true); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+   :}
+;
+outSignalBinding ::=
+      BINDING COLON OUTSIGNALBINDING_T BIND IDENT:b POINT IDENT:s EQUAL IDENT:c SEMICOLON {:
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(false); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+   :}
+   | BINDING COLON OUTSIGNALBINDING_T BIND IDENT:c EQUAL IDENT:b POINT IDENT:s SEMICOLON {:
+        getChannel(c.getAvatarName()); // set relevant channel as current
+        StxBlock tmp = theBlock; // save current block
+        getBlock(b.getAvatarName()); // get block of signal (in current block)
+        getSignal(b.getAvatarName(),s.getAvatarName()); // set relevant signal as current
+        theSignal.setInput(false); // update structure
+        theBlock.addSignal(theSignal); // update structure
+        theSignal.setChannel(theChannel); // update structure
+        theChannel.setSignal(b.getAvatarName(), theSignal); // update structure
+        theBlock = tmp; // restore current block
+   :}
+;
+
+// MESSAGE DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+
+messageDecl ::= inMessageDecl | outMessageDecl
+;
+
+// IN MESSAGE ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+inMessageDecl ::= inMessageDeclBegin:m inMessageDeclBODY:b {:
+    if (messageChannelParam == null) // missing channel parameter
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, mxleft, "In-message channel has not been set", null) );
+    if (flag) theStructure.setRight(bxright);
+:};
+inMessageDeclBegin ::= PART:p DEF IDENT:id specializes INMESSAGE_T LBRAC {:
+    getInMessage(id.getAvatarName());
+    if (! theStructure.declare() ) { //duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "In-message profile " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        theStructure.setLeft(pxleft);
+        messageChannelParam = null;
+        flag = true;
+    }
+:};
+inMessageDeclBODY ::=
+      messageChannel RBRAC
+    | messageChannel fieldDecls RBRAC
+    | fieldDecls messageChannel RBRAC
+;
+messageChannel ::=
+      PRIVATE:p PART CHANNEL_F COLON CHANNEL_T EQUAL IDENT:ch SEMICOLON {:
+        if (messageChannelParam != null) // duplicate
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft,
+                "in-message channel has already been set", messageChannelParam));
+        else { // message param is not set
+            getChannel(ch.getAvatarName());
+            theChannel.setInProfile((StxInMessage)theStructure);
+            ((StxInMessage)theStructure).setChannel(theChannel);
+            messageChannelParam = pxleft; // now it is
+        }
+      :}
+    | PRIVATE:p PART CHANNEL_F EQUAL IDENT:ch SEMICOLON {:
+        if (messageChannelParam != null) // duplicate
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft,
+                "in-message channel has already been set", messageChannelParam));
+        else { // message param is not set
+            getChannel(ch.getAvatarName());
+            theChannel.setInProfile((StxInMessage)theStructure);
+            ((StxInMessage)theStructure).setChannel(theChannel);
+            messageChannelParam = pxleft; // now it is
+        }
+      :}
+;
+
+// OUT MESSAGE ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+outMessageDecl ::=
+      outMessageDeclBegin SEMICOLON:b {:
+        if (flag) theOutMessage.setRight(bxright);
+      :}
+    | outMessageDeclBegin LBRAC RBRAC:b {:
+        if (flag) theOutMessage.setRight(bxright);
+      :}
+    | outMessageDeclBegin LBRAC outMessageDeclBODY
+;
+outMessageDeclBegin ::=
+      PART:p DEF IDENT:id specializes OUTMESSAGE_T COMMA IDENT:m {:
+        getInMessage(m.getAvatarName());
+        getOutMessage(id.getAvatarName(), (StxInMessage)theStructure);
+        if (! theOutMessage.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Out-message profile " + id.getAvatarName() +
+            " is already declared", theStructure.getLeft()) );
+            flag = false;
+        } else {
+            theOutMessage.setLeft(pxleft);
+            flag = true;
+        }
+      :}
+    | PART:p DEF IDENT:id specializes IDENT:m COMMA OUTMESSAGE_T {:
+        getInMessage(m.getAvatarName());
+        if (! theOutMessage.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Out-message profile " + id.getAvatarName() +
+            " is already declared", theStructure.getLeft()) );
+            flag = false;
+        } else {
+            theOutMessage.setLeft(pxleft);
+            flag = true;
+        }
+      :}
+;
+outMessageDeclBODY ::=
+      redefineField RBRAC:b {:
+        if (flag) theOutMessage.setRight(bxright);
+      :}
+    | redefineField outMessageDeclBODY
+;
+redefineField ::=
+      ATTRIBUTE:a IDENT:o REDEFINES IDENT:i SEMICOLON {:
+        StxField ofield = new StxField(axleft, axright, o.getAvatarName(), "");
+        // maps output field to its dual input field
+        if (! theOutMessage.addFieldLink(ofield, i.getAvatarName()))
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Field " + o.getAvatarName() +
+                        " is already declared") );
+:};
+
+// BLOCK DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+blockDecl ::=
+      blockDeclBegin RBRAC:e {: if (popBlockFlag()) theBlock.setRight(exright); popBlock(); :}
+    | blockDeclBegin blockDeclBODY:e {: if (popBlockFlag()) theBlock.setRight(exright); popBlock(); :}
+;
+blockDeclBegin ::=
+      PART:p IDENT:id COLON AVBLOCK_T LBRAC {:
+        StxBlock tmp = theBlock; // locally memorize father
+        pushBlock(); // globally memorize father state
+        getBlock(id.getAvatarName()); // set current block
+        if (! theBlock.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Block " + id.getAvatarName() +
+            " is already declared", theBlock.getLeft()) );
+            pushBlockFlag(false);
+        } else {
+            theBlock.setFather(tmp);
+            theBlock.setLeft(pxleft);
+            pushBlockFlag(true);
+        }
+:};
+blockDeclBODY ::=
+      blockItem RBRAC
+    | blockItem blockDeclBODY
+;
+blockItem ::=
+      attributeDecl
+    | constantDecl
+    | methodDecl
+    | signalDecl
+    | timerDecl
+    | stateMachine
+    | blockDecl
+;
+
+// ATTRIBUTE DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+attributeDecl ::=
+      attributeDeclHEADER SEMICOLON:q {:
+        if (flag) theAttribute.setRight(qxright);
+      :}
+    | attributeDeclHEADER GETS iexpr:e SEMICOLON:q {:
+        theAttribute.setInit(e);
+        if (flag) theAttribute.setRight(qxright);
+    :}
+    | attributeDeclHEADER DEFAULT GETS iexpr:e SEMICOLON:q {:
+        theAttribute.setInit(e);
+        if (flag) theAttribute.setRight(qxright);
+        theAttribute.setDefaultValue(true);
+    :}
+;
+attributeDeclHEADER ::=
+    ATTRIBUTE:a IDENT:id COLON typeIdent:tp {:
+        getAttribute(id.getAvatarName(), tp);
+        if (! theAttribute.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+            " is already declared  (or there is an attribute with same name)", theAttribute.getLeft()) );
+            flag = false;
+        } else {
+            StxElement e = theBlock.addAttribute(theAttribute);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxSignal)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Attribute " + id.getAvatarName() +
+                    " cannot be added: name already used for signal", e.getLeft()));
+                else ;
+            flag = true;
+            theAttribute.setLeft(axleft);
+        }
+:};
+
+// CONSTANT DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+constantDecl ::=
+      constantDeclHEADER SEMICOLON:q {:
+        if (flag) theAttribute.setRight(qxright);
+      :}
+    | constantDeclHEADER GETS iexpr:e SEMICOLON:q {:
+        theAttribute.setInit(e);
+        if (flag) theAttribute.setRight(qxright);
+    :}
+;
+constantDeclHEADER ::=
+    READONLY:r ATTRIBUTE IDENT:id COLON typeIdent:tp {:
+        getAttribute(id.getAvatarName(), tp);
+        if (! theAttribute.declare() ) {
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+            " is already declared (or there is an attribute with same name)", theAttribute.getLeft()) );
+            flag = false;
+        } else {
+            StxElement e = theBlock.addConstant(theAttribute);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else if (e instanceof StxSignal)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, rxleft, "Constant " + id.getAvatarName() +
+                    " cannot be added: name already used for signal", e.getLeft()));
+                else ;
+            flag = true;
+            theAttribute.setLeft(rxleft);
+        }
+:};
+
+// METHOD DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+methodDecl ::= voidMethodDecl | calcMethodDecl;
+
+voidMethodDecl ::=
+      voidMethodDeclBegin LBRAC RBRAC:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+    | voidMethodDeclBegin SEMICOLON:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+    | voidMethodDeclBegin LBRAC fieldDecls RBRAC:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+;
+voidMethodDeclBegin ::= ACTION:a IDENT:id COLON AVVOIDMETHOD_T {:
+    getMethod(id.getAvatarName());
+    if (! theStructure.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        StxElement e = theBlock.addMethod((StxMethod)theStructure);
+        if (e != null)
+            if (e instanceof StxTimer)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for timer", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        flag = true;
+        theStructure.setLeft(axleft);
+    }
+:};
+
+calcMethodDecl ::=
+      calcMethodDeclBegin LBRAC RBRAC:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+    | calcMethodDeclBegin LBRAC calcMethodItems RBRAC:b {:
+        if (flag) theStructure.setRight(bxright);
+      :}
+;
+calcMethodDeclBegin ::= CALC:c IDENT:id COLON AVCALCMETHOD_T {:
+    getMethod(id.getAvatarName());
+    if (! theStructure.declare() ) {
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+        " is already declared", theStructure.getLeft()) );
+        flag = false;
+    } else {
+        StxElement e = theBlock.addMethod((StxMethod)theStructure);
+        if (e != null)
+            if (e instanceof StxTimer)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for timer", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, cxleft, "Method " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        flag = true;
+        theStructure.setLeft(cxleft);
+    }
+:};
+calcMethodItems ::=
+      calcMethodItem
+    | calcMethodItem calcMethodItems
+;
+calcMethodItem ::=
+      fieldDecl
+    | RETURN COLON typeIdent:tp SEMICOLON {:
+        ((StxMethod)theStructure).setReturnType(tp);
+    :}
+;
+
+// SIGNAL DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+signalDecl ::=
+      PART:p IDENT:id COLON FIFO_T SEMICOLON:q {:
+        getSignal(theBlock.getName(),id.getAvatarName());
+        if (! theSignal.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+            " is already declared", theSignal.getLeft()) );
+        } else {
+            StxElement e = theBlock.addSignal(theSignal);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for timer", e.getLeft()));
+                else if (e instanceof StxAttribute)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for constant or attribute", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else;
+            theSignal.setLeft(pxleft);
+            theSignal.setRight(qxright);
+        }
+      :}
+    | PART:p IDENT:id COLON CHANNEL_T SEMICOLON:q {:
+        getSignal(theBlock.getName(),id.getAvatarName());
+        if (! theSignal.declare() ) { // duplicate
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+            " is already declared", theSignal.getLeft()) );
+        } else {
+            StxElement e = theBlock.addSignal(theSignal);
+            if (e != null)
+                if (e instanceof StxTimer)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for timer", e.getLeft()));
+                else if (e instanceof StxAttribute)
+                    addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for constant or attribute", e.getLeft()));
+                else if (e instanceof StxMethod)
+                   addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Signal " + id.getAvatarName() +
+                    " cannot be added: name already used for method", e.getLeft()));
+                else;
+            theSignal.setLeft(pxleft);
+            theSignal.setRight(qxright);
+        }
+      :}
+;
+
+// TIMER DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+timerDecl ::=
+      PART:p IDENT:id COLON AVTIMER_T EQUAL AVTIMER_T LPAR RPAR SEMICOLON:q {:
+        StxTimer t = new StxTimer(id.getAvatarName(), pxleft, qxright);
+        StxElement e = theBlock.addTimer(t);
+        if (e != null) // conflict with existing item e
+            if (e instanceof StxTimer && !e.declare())
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " is already declared", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxMethod)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for method", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        else t.declare();
+      :}
+    | PART:p IDENT:id COLON AVTIMER_T SEMICOLON:q {:
+        StxTimer t = new StxTimer(id.getAvatarName(), pxleft, qxright);
+        StxElement e = theBlock.addTimer(t);
+        if (e != null) // conflict with existing item e
+            if (e instanceof StxTimer && !e.declare())
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " is already declared", e.getLeft()));
+            else if (e instanceof StxAttribute)
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for constant or attribute", e.getLeft()));
+            else if (e instanceof StxMethod)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for method", e.getLeft()));
+            else if (e instanceof StxSignal)
+               addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, pxleft, "Timer " + id.getAvatarName() +
+                " cannot be added: name already used for signal", e.getLeft()));
+            else ;
+        else t.declare();
+      :}
+;
+
+// STATE MACHINE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+stateMachine ::=
+      stateMachineBegin LBRAC stateMachineItems RBRAC {:
+        theBlock.setStates(stateMap.values().toArray(new StxState[0])); // all collected information is put in block states
+        stateMap = null;
+      :}
+    | stateMachineBegin LBRAC  RBRAC {:
+        theBlock.setStates(stateMap.values().toArray(new StxState[0])); // all collected information is put in block states
+        stateMap = null;
+      :}
+    | stateMachineBegin SEMICOLON {:
+        theBlock.setStates(stateMap.values().toArray(new StxState[0])); // all collected information is put in block states
+        stateMap = null;
+      :}
+;
+stateMachineBegin ::= EXHIBIT:e STATE STATEMACHINE COLON AVSTATEMACHINE_T {:
+    if (stateMachine != null)
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, exleft,
+            "State Machine is already declared", stateMachine) );
+    else
+        stateMachine = exleft;
+
+    stateMap = new HashMap<String, StxState>();
+:};
+stateMachineItems ::=
+      stateMachineItem
+    | stateMachineItem stateMachineItems
+;
+stateMachineItem ::= state | transition;
+
+// STATES @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+state ::= standardState | stopState | startState | sendState | receiveState
+    | randomState | countState | presendState | prereceiveState
+    | setTimerState | resetTimerState | expireTimerState
+;
+startState ::=
+     startStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+   | startStateBegin:b EQUAL AVSTARTSTATE_T LPAR RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+   | startStateBegin EQUAL AVSTARTSTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+startStateBegin ::= ENTRY:z ACTION IDENT:id COLON AVSTARTSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSTARTSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+standardState ::=
+      standardStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | standardStateBegin:b EQUAL AVSTANDARDSTATE_T LPAR RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR poolParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+standardStateBegin ::= STATE:z IDENT:id COLON AVSTANDARDSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSTANDARDSTATE);
+        theState.setName(id.getAvatarName());
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+stopState ::=
+      stopStateBegin SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | stopStateBegin EQUAL AVSTOPSTATE_T LPAR RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+stopStateBegin ::= EXIT:z ACTION IDENT:id COLON AVSTOPSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSTOPSTATE);
+        theState.setLeft(zxright);
+        flag = true;
+    }
+:};
+sendState ::=
+      sendStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | sendStateBegin EQUAL AVSENDSTATE_T LPAR RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | sendStateBegin EQUAL AVSENDSTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+sendStateBegin ::= STATE:z IDENT:id COLON AVSENDSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSENDSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+receiveState ::=
+      receiveStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | receiveStateBegin:b EQUAL AVRECEIVESTATE_T LPAR RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+receiveStateBegin ::= STATE:z IDENT:id COLON AVRECEIVESTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXRECEIVESTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+randomState ::=
+      randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction COMMA requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | randomStateBegin EQUAL AVRANDOMSTATE_T LPAR requestParam COMMA randomAction RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | randomStateBegin:b EQUAL AVRANDOMSTATE_T LPAR randomAction RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+;
+randomStateBegin ::= STATE:z IDENT:id COLON AVRANDOMSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXRANDOMSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+countState ::=
+        countStateBegin:b EQUAL AVCOUNTSTATE_T LPAR countAction RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | countStateBegin EQUAL AVCOUNTSTATE_T LPAR requestParam COMMA countAction RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction COMMA requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+countStateBegin ::= STATE:z IDENT:id COLON AVCOUNTSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXCOUNTSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+presendState ::=
+      presendStateBegin EQUAL AVPRESENDSTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+presendStateBegin ::= STATE:z IDENT:id COLON AVPRESENDSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXPRESENDSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+prereceiveState ::=
+      prereceiveStateBegin EQUAL AVPRERECEIVESTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+;
+prereceiveStateBegin ::= STATE:z IDENT:id COLON AVPRERECEIVESTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXPRERECEIVESTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+setTimerState ::=
+      setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | setTimerStateBegin:b EQUAL AVSETTIMERSTATE_T LPAR RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | setTimerStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+;
+setTimerStateBegin ::= STATE:z IDENT:id COLON AVSETTIMERSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXSETTIMERSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+resetTimerState ::=
+      resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | resetTimerStateBegin:b EQUAL AVRESETTIMERSTATE_T LPAR RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | resetTimerStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+;
+resetTimerStateBegin ::= STATE:z IDENT:id COLON AVRESETTIMERSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXRESETTIMERSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+expireTimerState ::=
+      expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR requestParam RPAR SEMICOLON:q {:
+        if (flag) theState.setRight(qxright);
+     :}
+    | expireTimerStateBegin:b EQUAL AVEXPIRETIMERSTATE_T LPAR RPAR SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+    | expireTimerStateBegin:b SEMICOLON:q {:
+        tryTrivialRequest(bxleft, qxright);
+        if (flag) theState.setRight(qxright);
+     :}
+;
+expireTimerStateBegin ::= STATE:z IDENT:id COLON AVEXPIRETIMERSTATE_T {:
+    getState(id.getAvatarName());
+    if (! theState.declare() ) { // duplicate
+        addError( new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, zxleft, "State " + id.getAvatarName() +
+        " is already declared", theState.getLeft()) );
+        requestIndex = 0;
+        flag = false;
+    } else {
+        theState.setType(AvatarFromSysMLSyntax.STXEXPIRETIMERSTATE);
+        theState.setLeft(zxright);
+        requestIndex = 0;
+        flag = true;
+    }
+:};
+
+// STATES PARAMETERS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+// REQUESTS ++++++++++++++++++++++++++++++++++++
+
+// REQUESTS POOLS ------------------------------
+
+poolParam ::=
+      POOL_F EQUAL LBRAC LPAR RPAR RBRAC
+   |  POOL_F EQUAL LBRAC NULL RBRAC
+   |  POOL_F EQUAL LBRAC LPAR requestList RPAR RBRAC
+   |  POOL_F EQUAL request
+;
+requestParam ::= REQUEST_F EQUAL LBRAC request RBRAC;
+requestList ::= request | request COMMA requestList;
+
+request ::=
+      dummy IF:i iexpr:e QUEST simpleRequest:q ELSE NOKREQUEST_U LPAR INT:n RPAR:z {:
+        if (n != requestIndex + 1) {
+                addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, nxleft,
+                " request index must be the request range in the request list (beginning at 1)", null) );
+        }
+        if (okRequest) {
+            theTransition.setGuard(e);
+            theTransition.setRleft(ixleft);
+            theTransition.setRright(zxright);
+        }
+        requestIndex++;
+      :}
+    | dummy simpleRequest:i {:
+        if (okRequest) {
+            theTransition.setRleft(ixleft);
+            theTransition.setRright(ixright);
+        }
+        requestIndex++;
+       :}
+;
+dummy ::= {:
+            getTransition(requestIndex);
+            if (theTransition.isRequested()) { // duplicate
+                addError( new AvatarFromSysMLError(
+                    AvatarFromSysMLError.LOWERROR,
+                    lexer.getLocation(),
+                    "Transition " + (requestIndex + 1) + " is already requested",
+                    theTransition.getRleft()) );
+                okRequest = false; // request is a duplikate (skip handling)
+            } else {
+                theTransition.setRequested(true);
+                okRequest = true; // request is not a duplicate
+            }
+:};
+
+
+// SIMPLE REQUESTS -------------------------------------------
+
+simpleRequest ::= trivialRequest | sendRequest | receiveRequest
+    | setTimerRequest | resetTimerRequest | expireTimerRequest;
+
+trivialRequest ::=
+      IMMEDIATEREQUEST_U:i {:
+        if (!(requestIndex == 0)) {
+            addError( new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, ixleft,
+            " immediate request has index 1 and thus can only be used as first request", null) );
+        }
+        if (okRequest)
+            theTransition.setType(AvatarFromSysMLSyntax.STXTRIVIALTRANSITION);
+      :}
+    | trivialRequestBegin requestArgs RPAR
+;
+trivialRequestBegin ::= TRIVIALREQUEST_T LPAR {:
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXTRIVIALTRANSITION);
+    clearRequestArgs();
+:};
+sendRequest ::= sendRequestBegin requestArgs RPAR;
+sendRequestBegin ::=  SENDREQUEST_T LPAR {:
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXSENDTRANSITION);
+    clearRequestArgs();
+:};
+receiveRequest ::= receiveRequestBegin requestArgs RPAR;
+receiveRequestBegin ::= RECEIVEREQUEST_T LPAR {:
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXRECEIVETRANSITION);
+    clearRequestArgs();
+:};
+setTimerRequest ::= setTimerRequestBegin requestArgs RPAR;
+setTimerRequestBegin ::= SETTIMERREQUEST_T LPAR {:
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXSETTIMERTRANSITION);
+    clearRequestArgs();
+:};
+resetTimerRequest ::= resetTimerRequestBegin requestArgs RPAR;
+resetTimerRequestBegin ::= RESETTIMERREQUEST_T LPAR {:
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION);
+    clearRequestArgs();
+:};
+expireTimerRequest ::= expireTimerRequestBegin requestArgs RPAR;
+expireTimerRequestBegin ::= EXPIRETIMERREQUEST_T LPAR {:
+    if (okRequest)
+        theTransition.setType(AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION);
+    clearRequestArgs();
+:};
+
+// SIMPLE REQUESTS PARAMETERS -------------------------------
+
+requestArgs ::= requestArg | requestArg COMMA requestArgs;
+requestArg ::= indexParam | delayParam | channelParam | payloadParam | settimerParam | resettimerParam | expiretimerParam;
+
+// INDEX .........
+indexParam ::= INDEX_F:f EQUAL INT:i {:
+    if (indexArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING,fxleft, "index parameter has already been set", indexArg));
+    if (i != requestIndex + 1)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING,fxleft, "the index of a request must be its range (beginning at 1)",
+        null));
+    if (indexArg == null) indexArg = fxleft;
+:};
+
+// DELAY .........
+delayParam ::= delayKeyword EQUAL delayExpr;
+delayKeyword ::= DELAY_F:d {:
+    if (delayArg != null) {
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, dxleft, "delay parameter has already been set", delayArg));
+        argOK = false;
+    }
+    else {
+        delayArg = dxleft;
+        argOK = true;
+    }
+:};
+delayExpr ::=
+      iexpr:e {: if (argOK && okRequest) theTransition.setMinDelay(e); :}
+    | delayRandomExpr
+;
+delayRandomExpr ::=
+      BOUNDRANDOM_U LPAR iexpr:i COMMA iexpr:a RPAR {:
+        if(argOK && okRequest) {
+            theTransition.setMinDelay(i);
+            theTransition.setMaxDelay(a);
+        }
+      :}
+;
+// PAYLOAD .........
+payloadParam ::=
+      payloadParamBegin:b IDENT LPAR termList RPAR {: // termlist fills argList
+        if (argOK) { // not duplicate
+            if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION)
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                    "such payload is only relevant for send transitions", null));
+            if (okRequest) theTransition.setSendPayload(argList);
+        }
+        argList = null;
+      :}
+    | payloadParamBegin:b IDENT LPAR RPAR {:
+       if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for send transitions", null));
+           if (okRequest) theTransition.setSendPayload(argList);
+       }
+       argList = null;
+     :}
+    | payloadParamBegin:b IDENT {:
+       if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for send transitions", null));
+           if (okRequest) theTransition.setSendPayload(argList);
+       }
+       argList = null;
+     :}
+    | payloadParamBegin:b TIMERSETMSG_T LPAR stxExpr:e RPAR {:
+        if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXSETTIMERTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for set-timer transitions", null));
+           argList.add(e);
+           if (okRequest) theTransition.setSendPayload(argList);
+        }
+        argList = null;
+      :}
+    | payloadParamBegin:b TIMERRESETMSG_T LPAR  RPAR {:
+        if (argOK) { // not duplicate
+           if (theTransition.getType() != AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION)
+               addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, bxleft,
+                   "such payload is only relevant for reset-timer transitions", null));
+           if (okRequest) theTransition.setSendPayload(argList);
+        }
+        argList = null;
+      :}
+;
+payloadParamBegin ::= PAYLOAD_F:p EQUAL {:
+    if (payloadArg != null) {
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, pxleft, "payload parameter has already been set", payloadArg));
+        argOK = false;
+    }
+    else {
+        payloadArg = pxleft;
+        argOK = true;
+        argList= new ArrayList<StxTerm>();
+    }
+:};
+// CHANNEL .........
+channelParam ::= CHANNEL_F:c EQUAL IDENT:id {:
+    if (channelArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "channel parameter has already been set", channelArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXSENDTRANSITION &&
+             theTransition.getType() != AvatarFromSysMLSyntax.STXRECEIVETRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for send or receive transitions", null));
+       if (okRequest) {
+           theTransition.setSignalName(theBlock.getName(), id.getAvatarName());
+           commTransitions.add(theTransition);
+       }
+       channelArg = cxleft;
+    }
+:};
+// SET TIMER TIMER PARAM .........
+settimerParam ::= CHANNEL_F:c EQUAL IDENT:id POINT SET_TM {:
+    if (settimerArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "timer channel parameter has already been set", settimerArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXSETTIMERTRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for set-timer transitions", null));
+        if (okRequest) theTransition.setTimer(id.getAvatarName());
+        settimerArg = cxleft;
+    }
+:};
+// RESET TIMER TIMER PARAM .........
+resettimerParam ::= CHANNEL_F:c EQUAL IDENT:id POINT RESET_TM {:
+    if (resettimerArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "timer channel parameter has already been set", settimerArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for reset-timer transitions", null));
+        if (okRequest) theTransition.setTimer(id.getAvatarName());
+        resettimerArg = cxleft;
+    }
+:};
+// EXPIRE TIMER TIMER PARAM .........
+expiretimerParam ::= CHANNEL_F:c EQUAL IDENT:id POINT EXPIRE_TM {:
+    if (expiretimerArg != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft, "timer channel parameter has already been set", settimerArg));
+    else {
+        if (theTransition.getType() != AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, cxleft,
+                "such channel is only relevant for expire-timer transitions", null));
+        if (okRequest) theTransition.setTimer(id.getAvatarName());
+        expiretimerArg = cxleft;
+    }
+:};
+
+termList ::=
+    stxRvalue:e {: argList.add(e); :}
+    | termList COMMA stxRvalue:e  {: argList.add(e); :}
+;
+
+// STATE ACTIONS ++++++++++++++++++++++++++++++++++++
+
+// common: TARGET VARIABLE PARAMETER......
+targetParam ::= target EQUAL fullIdent {:
+    theState.setVariable(stringAcc.toString());
+:};
+target ::= TARGET_F {:
+    stringAcc = new StringBuffer();
+:};
+fullIdent ::=
+      IDENT:id                 {: stringAcc.append(id.getAvatarName()); :}
+    | fullIdent POINT IDENT:id {: stringAcc.append("." + id.getAvatarName()); :}
+;
+
+// RANDOM ACTION..........
+randomAction ::=
+      STATEACTION_F EQUAL ASSIGNMENT_T LPAR targetParam COMMA randomParam RPAR
+    | STATEACTION_F EQUAL ASSIGNMENT_T LPAR randomParam COMMA targetParam RPAR
+;
+randomParam ::= VALUE_F EQUAL actionRandomExpr;
+actionRandomExpr ::=
+      BOUNDRANDOM_U LPAR iexpr:i COMMA iexpr:a RPAR {:
+        theState.setMinValue(i);
+        theState.setMaxValue(a);
+      :}
+;
+
+// COUNT ACTION............
+countAction ::=
+      STATEACTION_F EQUAL ASSIGNMENT_T LPAR targetParam COMMA countParam RPAR
+    | STATEACTION_F EQUAL ASSIGNMENT_T LPAR countParam COMMA targetParam RPAR
+;
+countParam ::= VALUE_F EQUAL IDENT:id POINT AMOUNT_U LPAR RPAR {:
+    getSignal(theBlock.getName(),id.getAvatarName());
+    theState.setSignal(theSignal);
+:};
+
+// TRANSITIONS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+transition ::=
+      transitionBegin:t THEN IDENT:id SEMICOLON:q {:
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+      :}
+    | transitionBegin:t doActions THEN IDENT:id SEMICOLON:q {:
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+      :}
+    | transitionBegin:t THEN IDENT:id LBRAC transitionLabels RBRAC:q {:
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setDelayExtra(delayExtraMap);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+        delayExtraMap = null;
+      :}
+    | transitionBegin:t doActions THEN IDENT:id LBRAC transitionLabels RBRAC:q {:
+        if (flag) {
+            getState(id.getAvatarName());
+            theTransition.setTarget(theState);
+            theTransition.setDelayExtra(delayExtraMap);
+            theTransition.setLeft(txleft);
+            theTransition.setRight(qxright);
+        }
+        delayExtraMap = null;
+      :}
+;
+transitionBegin ::=
+      TRANSITION:t COLON AVTRANSITION_T FIRST IDENT:st {:
+        getState(st.getAvatarName());
+        getTransition(0);
+        if (!theTransition.declare()) {
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, txleft,
+                "transition with same index has already been declared", null));
+            flag = false;
+        }
+        else flag = true;
+        clearTransitionLbls();
+      :}
+    | TRANSITION:t COLON AVTRANSITION_T FIRST IDENT:st IF INDEX_F EQ INT:i {:
+       getState(st.getAvatarName());
+       getTransition(i-1);
+       if (!theTransition.declare()) {
+           addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, txleft,
+                "transition with same index has already been declared", null));
+           flag = true;
+       }
+       else flag = true;
+       clearTransitionLbls();
+     :}
+;
+
+// TRANSITION ACTIONS---------------------------------
+
+doActions ::=
+      transitionActionBegin LBRAC RBRAC
+    | transitionActionBegin LBRAC transitionAction RBRAC {:
+            if (flag) theTransition.setActions(actionList);
+            actionList = null;
+      :}
+    | receiveActionBegin LBRAC RBRAC
+    | receiveActionBegin LBRAC receiveAction RBRAC {:
+            if (flag) theTransition.setReceivePayload(receiveMap);
+            receiveMap = null;
+      :}
+;
+
+// ORDINARY TRANSITION ACTION LIST ..........................
+
+transitionActionBegin ::= DO ACTION COLON TRANSITIONACTION_T {:
+     actionList = new ArrayList<StxAction>();
+:};
+
+// RECEIVE TRANSITION ACTION LIST ..........................
+
+receiveActionBegin ::= DO ACTION COLON RECEIVEACTION_T {:
+     receiveMap = new HashMap<String,String>();
+:};
+
+// ORDINARY TRANSITION ACTION LIST ..........................
+
+transitionAction ::=
+      FIRST START_U SEMICOLON THEN DONE_U SEMICOLON
+    | FIRST START_U SEMICOLON actionSeq
+;
+actionSeq ::=
+      THEN act THEN DONE_U SEMICOLON
+    | THEN act actionSeq
+;
+act ::=
+      assign:a fulllIdent:id GETS stxRvalue:v SEMICOLON:q {:
+        actionList.add(new StxAction(axleft, qxright, id , v));
+      :}
+    | ACTION:a EQUAL stxCall:c SEMICOLON:q {:
+        actionList.add(new StxAction(axleft, qxright, c));
+      :}
+;
+assign ::= ASSIGN {:
+    stringAcc = new StringBuffer();
+:};
+fulllIdent ::= fullIdent {:
+    RESULT = stringAcc.toString();
+    stringAcc.setLength(0);
+:};
+
+// RECEIVE TRANSITION ACTION LIST ..........................
+
+receiveAction ::= messageLine receiveAssigns | receiveAssigns messageLine;
+
+messageLine ::= ITEM MSG_U COLON IDENT EQUAL PAYLOAD_F AS IDENT SEMICOLON;
+
+receiveAssigns ::=
+      FIRST START_U SEMICOLON THEN DONE_U SEMICOLON
+    | FIRST START_U SEMICOLON receiveAssignSeq
+;
+receiveAssignSeq ::=
+      receiveAssign THEN DONE_U SEMICOLON
+    | receiveAssign receiveAssignSeq
+;
+receiveAssign ::= THEN:t assign fullIdent GETS MSG_U POINT IDENT:id SEMICOLON {:
+    String test = receiveMap.get(id.getAvatarName());
+    if (test == null)  receiveMap.put(id.getAvatarName(),stringAcc.toString());
+    else
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, txleft,
+            "component " + id.getAvatarName() + " has already been assigned", null));
+:};
+
+// TRANSITION DISTRIBUTION LAWS ---------------------------------
+
+transitionLabels ::= transitionLabel SEMICOLON | transitionLabel SEMICOLON transitionLabels;
+transitionLabel ::= distributionLabel | weightLabel | extraLabel;
+distributionLabel ::= ATTRIBUTE:a DISTRIBUTION_A COLON STRING_T EQUAL STRING:s {:
+    if (distributionLbl != null)
+        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft,
+            "distribution label has already been assigned", distributionLbl));
+    else {
+        theTransition.setDelayDistributionLaw(s);
+        distributionLbl = axleft;
+    }
+:};
+weightLabel ::=
+      ATTRIBUTE:a WEIGHT_A COLON REAL_T EQUAL REAL:r {:
+        if (weightLbl != null)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft,
+                "weight label has already been assigned", weightLbl));
+        else {
+            theTransition.setProbability(r);
+            weightLbl = axleft;
+        }
+      :}
+   |  ATTRIBUTE:a WEIGHT_A COLON REAL_T EQUAL INT:r {:
+        if (weightLbl != null)
+            addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, axleft,
+                "weight label has already been assigned", weightLbl));
+        else {
+            theTransition.setProbability((double)r);
+            weightLbl = axleft;
+        }
+      :}
+;
+extraLabel ::=
+      ATTRIBUTE ANYNAME:n COLON STRING_T EQUAL STRING:s {:
+        if (delayExtraMap == null)
+            delayExtraMap = new HashMap<String,String>();
+        delayExtraMap.put(n,s);
+      :}
+    | ATTRIBUTE IDENT:n COLON STRING_T EQUAL STRING:s {:
+        if (delayExtraMap == null)
+            delayExtraMap = new HashMap<String,String>();
+        delayExtraMap.put(n.getAvatarName(),s);
+      :}
+;
+
+// CLASSIFIED EXPRESSIONS +++++++++++++++++++++++++++++++++++++++
+
+stxRvalue ::=
+    stxCall:c {: RESULT = c; // FUNCTION CALL:}
+  | expr:e {: RESULT = new StxExpr(e);  // INT/BOOL EXPRESSION :}
+  | complexIdent:i {: RESULT = new StxId(i); :}
+;
+
+stxExpr ::= iexpr:e {: RESULT = new StxExpr(e); // INT/BOOL EXPRESSION :}
+;
+
+iexpr ::= // string int/bool expression or complex ident
+    expr:e  {: RESULT = e; :}
+   | complexIdent:i {: RESULT = i; :}
+;
+
+// INT/BOOL EXPRESSIONS ---------------------------
+expr    ::=
+     iexpr:l PLUS iexpr:r {: RESULT = l + " + " + r; :}
+   | iexpr:l MINUS iexpr:r {: RESULT = l + " - " + r; :}
+   | iexpr:l MULT iexpr:r {: RESULT = l + " * " + r; :}
+   | iexpr:l DIV iexpr:r {: RESULT = l + " / " + r; :}
+   | iexpr:l MOD iexpr:r {: RESULT = l + " % " + r; :}
+   | MINUS iexpr:e {: RESULT = "-" + e; :} %prec UMINUS
+   | iexpr:l OR iexpr:r {: RESULT = l + " || " + r; :}
+   | iexpr:l AND iexpr:r {: RESULT = l + " && " + r; :}
+   | NOT iexpr:e {: RESULT = "!" + e; :}
+   | iexpr:l LT iexpr:r {: RESULT = l + " < " + r; :}
+   | iexpr:l GT iexpr:r {: RESULT = l + " > " + r; :}
+   | iexpr:l LEQ iexpr:r {: RESULT = l + " <= " + r; :}
+   | iexpr:l GEQ iexpr:r {: RESULT = l + " >= " + r; :}
+   | iexpr:l EQ iexpr:r {: RESULT = l + " == " + r; :}
+   | iexpr:l DIF iexpr:r {: RESULT = l + " != " + r; :}
+   | LPAR iexpr:e RPAR {: RESULT = "(" + e + ")"; :}
+   | INT:i {: RESULT = "" + i; :}
+   | BOOL:b {: RESULT = ( b ? "true" : "false" ); :}
+;
+
+// COMPLEX IDENT ---------------------------
+complexIdent ::=
+      IDENT:e {: RESULT = e.getAvatarName(); :}
+    | IDENT:e POINT complexIdent:i  {: RESULT = e.getAvatarName() + "." + i; :}
+;
+
+
+// METHOD CALL ---------------------------
+stxCall ::=
+      stxCallBegin RPAR {:
+        theCall.addSegment(stringAcc.toString() + ")");
+        RESULT = theCall;
+      :}
+    | stxCallBegin stxCallParams:l RPAR {:
+        theCall.addSegment(stringAcc.toString() + ")");
+        RESULT = theCall;
+      :}
+;
+stxCallBegin    ::= IDENT:i LPAR {:
+    theCall = new StxCall();
+    stringAcc = new StringBuffer(i.getAvatarName() + "(");
+:};
+
+stxCallParams ::= stxCallParam | stxCallParam comma stxCallParams;
+comma ::= COMMA {: stringAcc.append(", "); :}
+;
+stxCallParam ::=
+     expr:e  {: stringAcc.append(e); :}
+   | complexIdent:i  {:
+        theCall.addSegment(stringAcc.toString());
+        theCall.addIdent(i);
+        stringAcc.setLength(0);
+     :}
+   | call
+;
+call ::=
+      callBegin RPAR {: stringAcc.append(")"); :}
+    | stxCallBegin stxCallParams:l RPAR {: stringAcc.append(")"); :}
+;
+callBegin    ::= IDENT:i LPAR {:
+    stringAcc.append(i.getAvatarName() + "(");
+:};
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
new file mode 100644
index 0000000000000000000000000000000000000000..081d157ac306e3cb121377bd5807809fb3f43c61
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
@@ -0,0 +1,427 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+ package avatartranslator.tosysmlv2;
+import java_cup.runtime.*;
+import java_cup.runtime.ComplexSymbolFactory.*;
+import java.util.HashSet;
+import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*;
+
+%%
+
+%class LexerClassName
+%public
+%unicode
+%cup
+%line
+%column
+%eofval{
+   return makeSymbol(#Symb.EOF);
+%eofval}
+
+%yylexthrow Exception
+
+%{  /** create a symbol provided with current lexeme and location */
+    ComplexSymbol makeSymbol(int id, Object val) {
+        // System.out.print(" ##" + #Symb.terminalNames[id] + "-" + val + " " + "(" + "l:" + yyline + ",c:" + yycolumn + ")");
+        return new ComplexSymbol(
+            #Symb.terminalNames[id],
+            id,
+            new Location(yyline, yycolumn),
+            new Location(yyline, yycolumn + yytext().length()),
+            val);
+    }
+    /** create a symbol provided with current lexeme and location */
+    ComplexSymbol makeSymbol(int id) {
+        // System.out.print(" ##" + #Symb.terminalNames[id] + "(" + "l:" + yyline + ",c:" + yycolumn + ")");
+        return new ComplexSymbol(
+            #Symb.terminalNames[id],
+            id,
+            new Location(yyline, yycolumn),
+            new Location(yyline, yycolumn + yytext().length()));
+    }
+
+    /** to memorize error location before throwing an exception */
+    Location errorLocation;
+
+    /** memorize error location */
+    public void setErrorLocation(Location _errorLocation) { errorLocation = _errorLocation; }
+
+    /** get memorized error location */
+    public Location getErrorLocation() { return errorLocation; }
+
+    /** get current location. To allow parser to know location without lexeme (i.e. through empty grammar rule) */
+    public Location getLocation() { return new Location(yyline, yycolumn); }
+%}
+%init{
+  // there is initially no error
+    errorLocation = null;
+%init}
+Space = [\ \n\r\t\f]
+Natural = 0 | [1-9][0-9]*
+Real = {Natural} "." 0* {Natural}
+
+AvIdent = ("_"[a-zA-Z0-9] | [a-zA-Z])   ("_"[a-zA-Z0-9] | [a-zA-Z0-9])*    ("_")?
+dataTypeName = "'@dt:" {AvIdent} "'"
+blockName = "'@blk:" {AvIdent} "'"
+attributeName = "'$" {AvIdent} "'"
+fieldName = "'" {AvIdent} "'"
+relationName = ("'@BF" | "'@NBF" | "'@SYN") {Natural} ":" {AvIdent} "-" {AvIdent} "'"
+channelPreName = {AvIdent} "." {AvIdent} (">"|"<") {AvIdent} "." {AvIdent}
+signalName = "'@sig:" {AvIdent} "'"
+channelName = ("'@syn" | "'@bf" | "'@nbf") ":" {channelPreName} "'"
+messageName = "'@MSG:" {AvIdent} "." {AvIdent} "'"
+startStateName = "'@st:start'"
+stopStateName = "'@st:stop'"
+standardStateName = "'@st:standard." {AvIdent} "'"
+choiceStateName = "'@st:standard.choice__" [0-9]* "'"
+randomStateName = "'@st:random." {Natural} "'"
+countStateName = "'@st:count." {AvIdent} "." {Natural} "'"
+sendStateName = "'@st:send." {AvIdent} "." {Natural} "'"
+receiveStateName = "'@st:receive." {AvIdent} "." {Natural} "'"
+presendStateName = "'@st:presend." {AvIdent} "." {Natural} "'"
+prereceiveStateName = "'@st:prereceive." {AvIdent} "." {Natural} "'"
+setTimerStateName = "'@st:set." {AvIdent} "." {Natural} "'"
+resetTimerStateName = "'@st:reset." {AvIdent} "." {Natural} "'"
+expireTimerStateName = "'@st:expire." {AvIdent} "." {Natural} "'"
+presetTimerStateName = "'@st:preset." {AvIdent} "." {Natural} "'"
+preresetTimerStateName = "'@st:prereset." {AvIdent} "." {Natural} "'"
+preexpireTimerStateName = "'@st:preexpire." {AvIdent} "." {Natural} "'"
+timerBlockName = "'@tmr:" {AvIdent} "'"
+
+
+%state COMMENTLINE
+%state IMPORTITEM
+
+%%
+
+<COMMENTLINE> {
+ [^\n\r]+                   { break; }
+ "\n"                       { yybegin(YYINITIAL); break; }
+}
+<IMPORTITEM> {
+ [^;]+                   { break; }
+ "\;"                       { yybegin(YYINITIAL); break; }
+}
+
+<YYINITIAL> {
+ {Space}        { break; }
+ "//"           { yybegin(COMMENTLINE); break; }
+ {Natural}      { try { return makeSymbol(#Symb.INT, Integer.parseInt(yytext())); }
+                  catch (NumberFormatException nfe) {
+                    setErrorLocation(new Location(yyline, yycolumn));
+                    throw new Exception ("lexing : bad format for number : " + yytext()); }
+                }
+ {Real}         { try { return makeSymbol(#Symb.REAL, Double.parseDouble(yytext())); }
+                  catch (NumberFormatException nfe) {
+                    setErrorLocation(new Location(yyline, yycolumn));
+                    throw new Exception ("lexing : bad format for number : " + yytext()); }
+                }
+
+  "+"            { return makeSymbol(#Symb.PLUS); }
+  "-"            { return makeSymbol(#Symb.MINUS); }
+  "*"            { return makeSymbol(#Symb.MULT); }
+  "/"            { return makeSymbol(#Symb.DIV); }
+  "%"            { return makeSymbol(#Symb.MOD); }
+  "&"            { return makeSymbol(#Symb.AND); }
+  "|"            { return makeSymbol(#Symb.OR); }
+  "!="           { return makeSymbol(#Symb.DIF); }
+  "<"            { return makeSymbol(#Symb.LT); }
+  ">"            { return makeSymbol(#Symb.GT); }
+  "<="           { return makeSymbol(#Symb.LEQ); }
+  ">="           { return makeSymbol(#Symb.GEQ); }
+
+  "?"            { return makeSymbol(#Symb.QUEST); }
+
+ "=="            { return makeSymbol(#Symb.EQ); }
+ "true"          { return makeSymbol(#Symb.BOOL, Boolean.TRUE); }
+ "false"         { return makeSymbol(#Symb.BOOL, Boolean.FALSE); }
+  "("            { return makeSymbol(#Symb.LPAR); }
+  ")"            { return makeSymbol(#Symb.RPAR); }
+  "{"            { return makeSymbol(#Symb.LBRAC); }
+  "}"            { return makeSymbol(#Symb.RBRAC); }
+  ","            { return makeSymbol(#Symb.COMMA); }
+  ";"            { return makeSymbol(#Symb.SEMICOLON); }
+  ":"            { return makeSymbol(#Symb.COLON); }
+  "."            { return makeSymbol(#Symb.POINT); }
+  "::"           { return makeSymbol(#Symb.POINT); }
+  "="            { return makeSymbol(#Symb.EQUAL); }
+  ":="           { return makeSymbol(#Symb.GETS); }
+  [\"][^\"]*[\"]          { String s = yytext();
+                      return makeSymbol(#Symb.STRING, s.substring(1, s.length() - 1)); }
+  "'@max_size'"     { return makeSymbol(#Symb.MAXSIZE_F); }
+  "'@private'"      { return makeSymbol(#Symb.PRIVATE_F); }
+  "'@relation'"     { return makeSymbol(#Symb.RELATION_F); }
+  "'@block1'"       { return makeSymbol(#Symb.BLOCK1_F); }
+  "'@block2'"       { return makeSymbol(#Symb.BLOCK2_F); }
+  "'@pool'"         { return makeSymbol(#Symb.POOL_F); }
+  "'@request'"      { return makeSymbol(#Symb.REQUEST_F); }
+  "'@state_action'" { return makeSymbol(#Symb.STATEACTION_F); }
+  "'@index'"        { return makeSymbol(#Symb.INDEX_F); }
+  "'@delay'"        { return makeSymbol(#Symb.DELAY_F); }
+  "'@payload'"      { return makeSymbol(#Symb.PAYLOAD_F); }
+  "'@channel'"      { return makeSymbol(#Symb.CHANNEL_F); }
+  "'@target'"       { return makeSymbol(#Symb.TARGET_F); }
+  "'@value'"        { return makeSymbol(#Symb.VALUE_F); }
+  "'@statemachine'" { return makeSymbol(#Symb.STATEMACHINE); }
+  "'@set'"          { return makeSymbol(#Symb.SET_TM); }
+  "'@reset'"        { return makeSymbol(#Symb.RESET_TM); }
+  "'@expire'"       { return makeSymbol(#Symb.EXPIRE_TM); }
+  "'@delayDistributionLaw'" { return makeSymbol(#Symb.DISTRIBUTION_A); }
+  "'@weight'"      { return makeSymbol(#Symb.WEIGHT_A); }
+
+  "'#Relation'"    { return makeSymbol(#Symb.RELATION_T); }
+  "'#Sync_Rel'"    { return makeSymbol(#Symb.SYNCREL_T); }
+  "'#Bfifo_Rel'"   { return makeSymbol(#Symb.BFIFOREL_T); }
+  "'#NBfifo_Rel'"  { return makeSymbol(#Symb.NBFIFOREL_T); }
+  "'#InMessage'"   { return makeSymbol(#Symb.INMESSAGE_T); }
+  "'#OutMessage'"  { return makeSymbol(#Symb.OUTMESSAGE_T); }
+  "'#Channel'"     { return makeSymbol(#Symb.CHANNEL_T); }
+  "'#Fifo'"        { return makeSymbol(#Symb.FIFO_T); }
+  "'#Bfifo'"       { return makeSymbol(#Symb.BFIFO_T); }
+  "'#NBfifo'"      { return makeSymbol(#Symb.NBFIFO_T); }
+  "'#Sync'"        { return makeSymbol(#Symb.SYNC_T); }
+  "'#InSignalBinding'"  { return makeSymbol(#Symb.INSIGNALBINDING_T); }
+  "'#OutSignalBinding'" { return makeSymbol(#Symb.OUTSIGNALBINDING_T); }
+
+  "'start'"               { return makeSymbol(#Symb.START_U); }
+  "'done'"                { return makeSymbol(#Symb.DONE_U); }
+  "start"                 { return makeSymbol(#Symb.START_U); }
+  "done"                  { return makeSymbol(#Symb.DONE_U); }
+  "'@amount'"             { return makeSymbol(#Symb.AMOUNT_U); }
+  "'#nok_request'"        { return makeSymbol(#Symb.NOKREQUEST_U); }
+  "'#TrivialRequest'"     { return makeSymbol(#Symb.TRIVIALREQUEST_T); }
+  "'#immediate_request'"  { return makeSymbol(#Symb.IMMEDIATEREQUEST_U); }
+  "'#SendRequest'"        { return makeSymbol(#Symb.SENDREQUEST_T); }
+  "'#ReceiveRequest'"     { return makeSymbol(#Symb.RECEIVEREQUEST_T); }
+  "'@msg'"                { return makeSymbol(#Symb.MSG_U); }
+
+  "'#AvatarDataType'"  { return makeSymbol(#Symb.AVDATATYPE_T); }
+  "'#AvatarBlock'"  { return makeSymbol(#Symb.AVBLOCK_T); }
+  "'#AvatarVoidMethod'"  { return makeSymbol(#Symb.AVVOIDMETHOD_T); }
+  "'#AvatarCalcMethod'"  { return makeSymbol(#Symb.AVCALCMETHOD_T); }
+  "'#AvatarStandardState'"  { return makeSymbol(#Symb.AVSTANDARDSTATE_T); }
+  "'#AvatarStopState'"  { return makeSymbol(#Symb.AVSTOPSTATE_T); }
+  "'#AvatarStartState'"  { return makeSymbol(#Symb.AVSTARTSTATE_T); }
+  "'#AvatarSendState'"  { return makeSymbol(#Symb.AVSENDSTATE_T); }
+  "'#AvatarReceiveState'"  { return makeSymbol(#Symb.AVRECEIVESTATE_T); }
+  "'#AvatarRandomState'"  { return makeSymbol(#Symb.AVRANDOMSTATE_T); }
+  "'#AvatarCountState'"  { return makeSymbol(#Symb.AVCOUNTSTATE_T); }
+  "'#AvatarPreSendState'"  { return makeSymbol(#Symb.AVPRESENDSTATE_T); }
+  "'#AvatarPreReceiveState'"  { return makeSymbol(#Symb.AVPRERECEIVESTATE_T); }
+  "'#AvatarTransition'"  { return makeSymbol(#Symb.AVTRANSITION_T); }
+  "'#AvatarStateMachine'"  { return makeSymbol(#Symb.AVSTATEMACHINE_T); }
+  "'#ReceiveAction'"  { return makeSymbol(#Symb.RECEIVEACTION_T); }
+  "'#TransitionAction'"  { return makeSymbol(#Symb.TRANSITIONACTION_T); }
+
+  "'#AvatarSetTimerState'"  { return makeSymbol(#Symb.AVSETTIMERSTATE_T); }
+  "'#AvatarResetTimerState'"  { return makeSymbol(#Symb.AVRESETTIMERSTATE_T); }
+  "'#AvatarExpireTimerState'"  { return makeSymbol(#Symb.AVEXPIRETIMERSTATE_T); }
+  "'#AvatarSetTimerRequest'"  { return makeSymbol(#Symb.SETTIMERREQUEST_T); }
+  "'#AvatarResetTimerRequest'"  { return makeSymbol(#Symb.RESETTIMERREQUEST_T); }
+  "'#AvatarExpireTimerRequest'"  { return makeSymbol(#Symb.EXPIRETIMERREQUEST_T); }
+  "'#TimerSetMsg'"  { return makeSymbol(#Symb.TIMERSETMSG_T); }
+  "'#TimerResetMsg'"  { return makeSymbol(#Symb.TIMERRESETMSG_T); }
+  "'#TimerExpireMsg'"  { return makeSymbol(#Symb.TIMEREXPIREMSG_T); }
+  "'#AvatarTimer'"  { return makeSymbol(#Symb.AVTIMER_T); }
+
+  "'#Assignment'"  { return makeSymbol(#Symb.ASSIGNMENT_T); }
+  "'#bound_random'"  { return makeSymbol(#Symb.BOUNDRANDOM_U); }
+  "Integer"          { return makeSymbol(#Symb.INTEGER_T); }
+  "Boolean"          { return makeSymbol(#Symb.BOOLEAN_T); }
+  "String"           { return makeSymbol(#Symb.STRING_T); }
+  "Real"             { return makeSymbol(#Symb.REAL_T); }
+
+  "about"            { return makeSymbol(#Symb.ABOUT); }
+  "abstract"         { return makeSymbol(#Symb.ABSTRACT); }
+  "accept"           { return makeSymbol(#Symb.ACCEPT); }
+  "action"           { return makeSymbol(#Symb.ACTION); }
+  "actor"            { return makeSymbol(#Symb.ACTOR); }
+  "after"            { return makeSymbol(#Symb.AFTER); }
+  "alias"            { return makeSymbol(#Symb.ALIAS); }
+  "all"              { return makeSymbol(#Symb.ALL); }
+  "allocate"         { return makeSymbol(#Symb.ALLOCATE); }
+  "allocation"       { return makeSymbol(#Symb.ALLOCATION); }
+  "analysis"         { return makeSymbol(#Symb.ANALYSIS); }
+  "and"              { return makeSymbol(#Symb.AND); }
+  "as"               { return makeSymbol(#Symb.AS); }
+  "assert"           { return makeSymbol(#Symb.ASSERT); }
+  "assign"           { return makeSymbol(#Symb.ASSIGN); }
+  "assoc"            { return makeSymbol(#Symb.ASSOC); }
+  "assume"           { return makeSymbol(#Symb.ASSUME); }
+  "at"               { return makeSymbol(#Symb.AT); }
+  "attribute"        { return makeSymbol(#Symb.ATTRIBUTE); }
+  "bind"             { return makeSymbol(#Symb.BIND); }
+  "binding"          { return makeSymbol(#Symb.BINDING); }
+  "block"            { return makeSymbol(#Symb.BLOCK); }
+  "by"               { return makeSymbol(#Symb.BY); }
+  "calc"             { return makeSymbol(#Symb.CALC); }
+  "case"             { return makeSymbol(#Symb.CASE); }
+  "comment"          { return makeSymbol(#Symb.COMMENT); }
+  "concern"          { return makeSymbol(#Symb.CONCERN); }
+  "connect"          { return makeSymbol(#Symb.CONNECT); }
+  "connection"       { return makeSymbol(#Symb.CONNECTION); }
+  "constraint"       { return makeSymbol(#Symb.CONSTRAINT); }
+  "decide"           { return makeSymbol(#Symb.DECIDE); }
+  "def"              { return makeSymbol(#Symb.DEF); }
+  "default"          { return makeSymbol(#Symb.DEFAULT); }
+  "defined"          { return makeSymbol(#Symb.DEFINED); }
+  "dependency"       { return makeSymbol(#Symb.DEPENDENCY); }
+  "derived"          { return makeSymbol(#Symb.DERIVED); }
+  "do"               { return makeSymbol(#Symb.DO); }
+  "doc"              { return makeSymbol(#Symb.DOC); }
+  "else"             { return makeSymbol(#Symb.ELSE); }
+  "end"              { return makeSymbol(#Symb.END); }
+  "entry"            { return makeSymbol(#Symb.ENTRY); }
+  "enum"             { return makeSymbol(#Symb.ENUM); }
+  "event"            { return makeSymbol(#Symb.EVENT); }
+  "exhibit"          { return makeSymbol(#Symb.EXHIBIT); }
+  "exit"             { return makeSymbol(#Symb.EXIT); }
+  "expose"           { return makeSymbol(#Symb.EXPOSE); }
+  "filter"           { return makeSymbol(#Symb.FILTER); }
+  "first"            { return makeSymbol(#Symb.FIRST); }
+  "flow"             { return makeSymbol(#Symb.FLOW); }
+  "for"              { return makeSymbol(#Symb.FOR); }
+  "fork"             { return makeSymbol(#Symb.FORK); }
+  "frame"            { return makeSymbol(#Symb.FRAME); }
+  "from"             { return makeSymbol(#Symb.FROM); }
+  "hastype"          { return makeSymbol(#Symb.HASTYPE); }
+  "if"               { return makeSymbol(#Symb.IF); }
+  "implies"          { return makeSymbol(#Symb.IMPLIES); }
+  "import"           { yybegin(IMPORTITEM); return makeSymbol(#Symb.IMPORT); }
+  "in"               { return makeSymbol(#Symb.IN); }
+  "include"          { return makeSymbol(#Symb.INCLUDE); }
+  "individual"       { return makeSymbol(#Symb.INDIVIDUAL); }
+  "inout"            { return makeSymbol(#Symb.INOUT); }
+  "interface"        { return makeSymbol(#Symb.INTERFACE); }
+  "istype"           { return makeSymbol(#Symb.ISTYPE); }
+  "item"             { return makeSymbol(#Symb.ITEM); }
+  "join"             { return makeSymbol(#Symb.JOIN); }
+  "language"         { return makeSymbol(#Symb.LANGUAGE); }
+  "loop"             { return makeSymbol(#Symb.LOOP); }
+  "merge"            { return makeSymbol(#Symb.MERGE); }
+  "message"          { return makeSymbol(#Symb.MESSAGE); }
+  "metadata"         { return makeSymbol(#Symb.METADATA); }
+  "nonunique"        { return makeSymbol(#Symb.NONUNIQUE); }
+  "not"              { return makeSymbol(#Symb.NOT); }
+  "objective"        { return makeSymbol(#Symb.OBJECTIVE); }
+  "occurrence"       { return makeSymbol(#Symb.OCCURRENCE); }
+  "of"               { return makeSymbol(#Symb.OF); }
+  "or"               { return makeSymbol(#Symb.OR); }
+  "ordered"          { return makeSymbol(#Symb.ORDERED); }
+  "out"              { return makeSymbol(#Symb.OUT); }
+  "package"          { return makeSymbol(#Symb.PACKAGE); }
+  "parallel"         { return makeSymbol(#Symb.PARALLEL); }
+  "part"             { return makeSymbol(#Symb.PART); }
+  "perform"          { return makeSymbol(#Symb.PERFORM); }
+  "port"             { return makeSymbol(#Symb.PORT); }
+  "private"          { return makeSymbol(#Symb.PRIVATE); }
+  "protected"        { return makeSymbol(#Symb.PROTECTED); }
+  "public"           { return makeSymbol(#Symb.PUBLIC); }
+  "readonly"         { return makeSymbol(#Symb.READONLY); }
+  "redefines"        { return makeSymbol(#Symb.REDEFINES); }
+  "ref"              { return makeSymbol(#Symb.REF); }
+  "references"       { return makeSymbol(#Symb.REFERENCES); }
+  "render"           { return makeSymbol(#Symb.RENDER); }
+  "rendering"        { return makeSymbol(#Symb.RENDERING); }
+  "rep"              { return makeSymbol(#Symb.REP); }
+  "require"          { return makeSymbol(#Symb.REQUIRE); }
+  "requirement"      { return makeSymbol(#Symb.REQUIREMENT); }
+  "return"           { return makeSymbol(#Symb.RETURN); }
+  "satisfy"          { return makeSymbol(#Symb.SATISFY); }
+  "send"             { return makeSymbol(#Symb.SEND); }
+  "snapshot"         { return makeSymbol(#Symb.SNAPSHOT); }
+  "specializes"      { return makeSymbol(#Symb.SPECIALIZES); }
+  ":>"               { return makeSymbol(#Symb.REFINES); }
+  "stakeholder"      { return makeSymbol(#Symb.STAKEHOLDER); }
+  "state"            { return makeSymbol(#Symb.STATE); }
+  "subject"          { return makeSymbol(#Symb.SUBJECT); }
+  "subsets"          { return makeSymbol(#Symb.SUBSETS); }
+  "succession"       { return makeSymbol(#Symb.SUCCESSION); }
+  "then"             { return makeSymbol(#Symb.THEN); }
+  "timeslice"        { return makeSymbol(#Symb.TIMESLICE); }
+  "to"               { return makeSymbol(#Symb.TO); }
+  "transition"       { return makeSymbol(#Symb.TRANSITION); }
+  "until"            { return makeSymbol(#Symb.UNTIL); }
+  "use"              { return makeSymbol(#Symb.USE); }
+  "variant"          { return makeSymbol(#Symb.VARIANT); }
+  "variation"        { return makeSymbol(#Symb.VARIATION); }
+  "verification"     { return makeSymbol(#Symb.VERIFICATION); }
+  "verify"           { return makeSymbol(#Symb.VERIFY); }
+  "via"              { return makeSymbol(#Symb.VIA); }
+  "view"             { return makeSymbol(#Symb.VIEW); }
+  "viewpoint"        { return makeSymbol(#Symb.VIEWPOINT); }
+  "when"             { return makeSymbol(#Symb.WHEN); }
+  "while"            { return makeSymbol(#Symb.WHILE); }
+  "xor"              { return makeSymbol(#Symb.XOR); }
+  "null"             { return makeSymbol(#Symb.NULL); }
+
+  {dataTypeName}              { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.DATATYPENAME,yytext())); }
+  {blockName}                 { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.BLOCKNAME,yytext())); }
+  {attributeName}             { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.ATTRIBUTENAME,yytext())); }
+  {relationName}              { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.RELATIONNAME,yytext())); }
+  {channelPreName}            { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.CHANNELPRENAME,yytext())); }
+  {signalName}                { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.SIGNALNAME,yytext())); }
+  {channelName}               { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.CHANNELNAME,yytext())); }
+  {messageName}               { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.MESSAGENAME,yytext())); }
+  {startStateName}            { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.CHANNELPRENAME,yytext())); }
+  {stopStateName}             { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.STARTSTATENAME,yytext())); }
+  {choiceStateName}           { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.STANDARDSTATENAME,yytext())); }
+  {standardStateName}         { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.STANDARDSTATENAME,yytext())); }
+  {randomStateName}           { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.RANDOMSTATENAME,yytext())); }
+  {countStateName}            { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.COUNTSTATENAME,yytext())); }
+  {sendStateName}             { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.SENDSTATENAME,yytext())); }
+  {receiveStateName}          { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.RECEIVESTATENAME,yytext())); }
+  {presendStateName}          { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.PRESENDSTATENAME,yytext())); }
+  {prereceiveStateName}       { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.PRERECEIVESTATENAME,yytext())); }
+  {setTimerStateName}         { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.SETTIMERSTATENAME,yytext())); }
+  {resetTimerStateName}       { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.RESETTIMERSTATENAME,yytext())); }
+  {expireTimerStateName}      { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.EXPIRETIMERSTATENAME,yytext())); }
+  {presetTimerStateName}      { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.PRESETTIMERSTATENAME,yytext())); }
+  {preresetTimerStateName}    { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.PRERESETTIMERSTATENAME,yytext())); }
+  {preexpireTimerStateName}   { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.PREEXPIRETIMERSTATENAME,yytext())); }
+  {timerBlockName}            { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.TIMERBLOCKNAME,yytext())); }
+  {fieldName}                 { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.QUOTEDNAME,yytext())); }
+  {AvIdent}                   { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.AVATARNAME,yytext())); }
+  "'"{AvIdent}"'"             { return makeSymbol(#Symb.IDENT, new Ident(AvatarFromSysMLSyntax.AVATARNAME,yytext())); }
+  "'"[^']+"'"                  { String s = yytext();
+                                return makeSymbol(#Symb.ANYNAME, s.substring(1, s.length() - 1)); }
+ . { setErrorLocation(new Location(yyline, yycolumn));
+     throw new Exception ("unexpected character in  expression"); }
+}
+
+
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/compile b/src/main/java/avatartranslator/tosysmlv2/javacup/compile
new file mode 100755
index 0000000000000000000000000000000000000000..3dbee88ea266a8ede84b5d468e401a8916dafbc9
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/compile
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+JFLEX_FILE="Avatar2SysMLLexer.jflex"
+JAVACUP_FILE="Avatar2SysMLParser.jcup"
+LEXER_CLASS="Avatar2SysMLLexer"
+PARSER_CLASS="Avatar2SysMLParser"
+SYMBOL_CLASS="Avatar2SysMLSymbols"
+
+sed "s/LexerClassName/$LEXER_CLASS/g" $JFLEX_FILE > __${LEXER_CLASS}2__.jflex
+sed "s/#Symb/$SYMBOL_CLASS/g" __${LEXER_CLASS}2__.jflex > __${LEXER_CLASS}__.jflex
+
+jflex __${LEXER_CLASS}__.jflex
+rm __${LEXER_CLASS}__.jflex __${LEXER_CLASS}2__.jflex
+sed "s/<tt>/<code>/g" ${LEXER_CLASS}.java > __${LEXER_CLASS}2__.java
+sed "s/<\/tt>/<\/code>/g" __${LEXER_CLASS}2__.java > ${LEXER_CLASS}.java
+rm __${LEXER_CLASS}2__.java
+sed "s/LexerClassName/$LEXER_CLASS/g" $JAVACUP_FILE > __${PARSER_CLASS}2__.jcup
+sed "s/ParserClassName/$PARSER_CLASS/g" __${PARSER_CLASS}2__.jcup > __${PARSER_CLASS}__.jcup
+java-cup  -dump -nonterms -parser $PARSER_CLASS -symbols $SYMBOL_CLASS __${PARSER_CLASS}__.jcup 2> truc
+
+rm __${PARSER_CLASS}__.jcup __${PARSER_CLASS}2__.jcup *~
+mv $LEXER_CLASS.java $PARSER_CLASS.java $SYMBOL_CLASS.java ..
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/compile2 b/src/main/java/avatartranslator/tosysmlv2/javacup/compile2
new file mode 100755
index 0000000000000000000000000000000000000000..1542c8fd8925f4a145d1886ebbf6a25405c29167
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/compile2
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+JFLEX_FILE="AvatarFromSysML.jflex"
+JAVACUP_FILE="AvatarFromSysML.jcup"
+LEXER_CLASS="AvatarFromSysMLLexer"
+PARSER_CLASS="AvatarFromSysMLParser"
+SYMBOL_CLASS="AvatarFromSysMLSymbols"
+
+sed "s/LexerClassName/$LEXER_CLASS/g" $JFLEX_FILE > __${LEXER_CLASS}2__.jflex
+sed "s/#Symb/$SYMBOL_CLASS/g" __${LEXER_CLASS}2__.jflex > __${LEXER_CLASS}__.jflex
+
+jflex __${LEXER_CLASS}__.jflex
+rm __${LEXER_CLASS}__.jflex __${LEXER_CLASS}2__.jflex
+sed "s/<tt>/<code>/g" ${LEXER_CLASS}.java > __${LEXER_CLASS}2__.java
+sed "s/<\/tt>/<\/code>/g" __${LEXER_CLASS}2__.java > ${LEXER_CLASS}.java
+rm __${LEXER_CLASS}2__.java
+sed "s/LexerClassName/$LEXER_CLASS/g" $JAVACUP_FILE > __${PARSER_CLASS}2__.jcup
+sed "s/ParserClassName/$PARSER_CLASS/g" __${PARSER_CLASS}2__.jcup > __${PARSER_CLASS}__.jcup
+java-cup  -dump -nonterms -locations -parser $PARSER_CLASS -symbols $SYMBOL_CLASS __${PARSER_CLASS}__.jcup 2> truc
+
+rm __${PARSER_CLASS}__.jcup __${PARSER_CLASS}2__.jcup *~
+mv $LEXER_CLASS.java $PARSER_CLASS.java $SYMBOL_CLASS.java ..
diff --git a/src/main/java/avatartranslator/tosysmlv2/package-info.java b/src/main/java/avatartranslator/tosysmlv2/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..9574a808dc75d5ed74adcebe69834908da1e227c
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/package-info.java
@@ -0,0 +1,358 @@
+ /* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+  *
+  * ludovic.apvrille AT enst.fr
+  *
+  * This software is a computer program whose purpose is to allow the
+  * edition of TURTLE analysis, design and deployment diagrams, to
+  * allow the generation of RT-LOTOS or Java code from this diagram,
+  * and at last to allow the analysis of formal validation traces
+  * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+  * from INRIA Rhone-Alpes.
+  *
+  * This software is governed by the CeCILL  license under French law and
+  * abiding by the rules of distribution of free software.  You can  use,
+  * modify and/ or redistribute the software under the terms of the CeCILL
+  * license as circulated by CEA, CNRS and INRIA at the following URL
+  * "http://www.cecill.info".
+  *
+  * As a counterpart to the access to the source code and  rights to copy,
+  * modify and redistribute granted by the license, users are provided only
+  * with a limited warranty  and the software's author,  the holder of the
+  * economic rights,  and the successive licensors  have only  limited
+  * liability.
+  *
+  * In this respect, the user's attention is drawn to the risks associated
+  * with loading,  using,  modifying and/or developing or reproducing the
+  * software by the user in light of its specific status of free software,
+  * that may mean  that it is complicated to manipulate,  and  that  also
+  * therefore means  that it is reserved for developers  and  experienced
+  * professionals having in-depth computer knowledge. Users are therefore
+  * encouraged to load and test the software's suitability as regards their
+  * requirements in conditions enabling the security of their systems and/or
+  * data to be ensured and,  more generally, to use and operate it in the
+  * same conditions as regards security.
+  *
+  * The fact that you are presently reading this means that you have had
+  * knowledge of the CeCILL license and that you accept its terms.
+  */
+
+/**
+ * Package intboolsolver, a generic modular parser/evaluator for
+ * boolean/integer expressions with variables.
+ * Creation: 11/04/2023.
+ *
+ * <p> This package (IntBoolSolver or IBS) provides a way to parse and
+ * evaluate boolean/integer  expressions. The handling of variables is
+ * parametrized (thus it can be instantiated in different contexts). The
+ * package is modular in the sense that expression structure or parsing
+ * algorithm can be changed without having to modify other components. </p>
+ *
+ * <p> The solver may be instantiated by usual expressions with variables
+ * and their usual evaluation, but it is more generally dedicated to
+ * two-level structured systems, i.e global specifications build over
+ * a set of components. Identifiers can be associated to components or
+ * to specifications. The solver also handles a notion of component/specification
+ * state that can be interpreted as state machine state. </p>
+ * <p> To instantiate this generic system, trivial parameters can be used
+ * when targeting solvers that do not use all the features, such as for example
+ * a solver for closed expressions (which is provided).</p>
+ * <ul>
+ *     <li> <p>{@link myutil.intboolsolver.IBSParserAPI
+ *     IBSParserAPI} provides documentation about the functions
+ *     exported by the provided parser instances.</p>
+ *     <p> The way leaves are handled depends on the notions of specification,
+ *     component, specification state, component state and (state machine)
+ *     state of the instance. Thus the corresponding classes are parameters
+ *     of the generic parser.</p>
+ *     <p> The handling of variables relies on an "<b>attribute class</b>" that
+ *     must be provided for each instance (partial implementation is
+ *     provided).</p>
+ *     <p> The parser also relies on an "<b>expression class</b>" which
+ *     implements the structure of the expressions build by the parser (full
+ *     implementations is provided)</p>
+ *     <p> {@link myutil.intboolsolver.IBSStdParser IBSStdParser},
+ *     {@link myutil.intboolsolver.IBSStdLexer IBSStdLexer} and
+ *     {@link myutil.intboolsolver.IBSStdSymbols IBSStdSymbol} are classes
+ *     generated by a <a href="#javacup">java-cup/jflex parser </a> (sources
+ *     in the "javacup" subdirectory) that implements
+ *     {@link myutil.intboolsolver.IBSParserAPI IBSParserAPI}.
+ *     The additional interface {@link myutil.intboolsolver.IBSScanner
+ *     IBSScanner} abstracts the lexers required by IBS, allowing to make
+ *     them a parameter of the parser.
+ *     </p>
+ *     </li>
+ *     <li> <p>{@link myutil.intboolsolver.IBSExpressions IBSExpressions}
+ *     describes the interface expected for expression handling. It contains two
+ *     kind of methods: methods for building expressions (required by parsing)
+ *     and methods for evaluating expressions (useful for final user, but also
+ *     available for parser implementations).</p>
+ *     <p>{@link myutil.intboolsolver.IBSStdExpressions
+ *         IBSStdExpressions} is a full implementation of {@link
+ *         myutil.intboolsolver.IBSExpressions IBSExpressions}.
+ *         Its classical structure is easy to extend (for example by adding
+ *         operators). W.r.t. {@link myutil.intboolsolver.IBSExpressions
+ *         IBSExpressions}, it provides additional features such as tools
+ *         to identify expression kinds and to access sub-expressions.</p>
+ *     <li> <p>{@link myutil.intboolsolver.IBSAttributes IBSAttributes}
+ *     describes the interface required from the attribute class that must be
+ *     provided for instantiation. It also provides some data shared by all
+ *     instances (some constants and a technical classes). Roughly speaking,
+ *     this class provides an interpretation for variables.</p>
+ *     <p>{@link myutil.intboolsolver.IBSStdAttributes
+ *     IBSStdAttributes} extends {@link
+ *     myutil.intboolsolver.IBSAttributes IBSAttributes}. It
+ *     provides a partial implementation so that instances just have
+ *     to provide low level methods.</p>
+ *     <li><p>{@link myutil.intboolsolver.IBSParamSpec IBSParamSpec},
+ *     {@link myutil.intboolsolver.IBSParamComp IBSParamComp},
+ *     {@link myutil.intboolsolver.IBSParamState IBSParamState},
+ *     {@link myutil.intboolsolver.IBSParamSpecState IBSParamSpecState}
+ *     and {@link myutil.intboolsolver.IBSParamCompState IBSParamCompState} are
+ *     trivial classes used for technical reasons. The corresponding concrete
+ *     classes provided for instantiation must extend them. They are the type
+ *     of the parameters of the generic parser. Thus to instantiate a parser we
+ *     have to provide:</p>
+ *     <ul>
+ *         <li> <p>a {@code Spec} class, which <b>must implement</b> {@link
+ *         myutil.intboolsolver.IBSParamSpec IBSParamSpec}: the class of
+ *         global system specifications, which intuitively associates
+ *         structures to specification level variables.</p>
+ *         </li>
+ *         <li> <p>a {@code Comp} class, which <b>must implement</b> {@link
+ *         myutil.intboolsolver.IBSParamComp IBSParamComp}: the class
+ *         of system components, which intuitively associates
+ *         structures to component level variables.</p>
+ *         </li>
+ *         <li> <p>a {@code State} class, which <b>must implement</b>
+ *         {@link myutil.intboolsolver.IBSParamState IBSParamState}:
+ *         a class of states. In provided extension
+ *         {@link myutil.intboolsolver.IBSStdAttributes IBSStdAttributes},
+ *         these states are state machine states associated to components.
+ *         </p>
+ *         </li>
+ *         <li> <p>a {@code SpecState} class, which <b>must implement</b>
+ *         {@link myutil.intboolsolver.IBSParamSpecState
+ *         IBSParamSpecState}: the class of specification state, which
+ *         associates int/bool values to specification level variables.</p>
+ *         </li>
+ *         <li> <p>a {@code CompState} class, which <b>must implement</b>
+ *         {@link myutil.intboolsolver.IBSParamCompState
+ *         IBSParamCompState}: the class of component states, which
+ *  *         associates int/bool values to component level variables.</p>
+ *         </li>
+ *     </ul>
+ *     <p><b>WARNING!!</b> A successful instantiation requires that
+ *     class <i>xxx</i> (with <i>xxx</i> among {@code Spec}, {@code Comp},
+ *     {@code SpecState}, {@code CompState} and {@code State}) does
+ *     not implement any IBS<i>yyy</i>Param with <i>yyy</i>
+ *     &#8800;  <i>xxx</i>.</p>
+ *     <p> Trivial implementations of {@link myutil.intboolsolver.IBSParamSpec
+ *     IBSParamSpec},
+ *     {@link myutil.intboolsolver.IBSParamComp IBSParamComp},
+ *     {@link myutil.intboolsolver.IBSParamState IBSParamState},
+ *     {@link myutil.intboolsolver.IBSParamSpecState IBSParamSpecState}
+ *     and
+ *     {@link myutil.intboolsolver.IBSParamCompState IBSParamCompState}
+ *     (i.e. classes with empty code) can be used to
+ *     instantiate solvers that do not implement the corresponding concepts.</p>
+ *     </li><li>
+ *     To make the use of the IBS system easier (in particular hide casts),
+ *     wrapper classes can be written, as illustrated in the provided IBS
+ *     instances.
+ *     </li>
+ *
+ * </ul>
+ * <p><a id="instanciation_sumary"> <b>Instantiation summary:</b></a></p>
+ * <ol>
+ *     <li><p> provide {@code Spec}, {@code Comp}, {@code SpecState},
+ *     {@code CompState} and {@code State} from application. These classes
+ *     just have to extend their associated parameter IBS<i>xxx</i>Param
+ *     and not extend any other IBS<i>yyy</i>Param (with
+ *     <i>xxx</i> &#8800; <i>yyy</i>)</p>
+ *     </li>
+ *     <li> <p> provide an implementation {@code Attribs} of
+ *     {@link myutil.intboolsolver.IBSAttributes IBSAttributes} or
+ *     {@link myutil.intboolsolver.IBSStdAttributes
+ *     IBSStdAttributes}, and instanciate it with the chosen {@code Spec},
+ *     {@code Comp}, {@code SpecState}, {@code CompState} and {@code State}.</p>
+       <PRE>
+     known from context (package, imports): intboolsolver,
+         Spec, Comp, SpecState, CompState, State
+
+     public class Attribs
+         extends IBS[Std]Attributes &lt;Spec,Comp,SpecState,CompState,State&gt; {
+
+              !!! put implementation of IBS[Std]Attributes here
+     }
+ *     </PRE>
+ *     </li>
+ *     <li> <p>build expression class <code>Exprs</code> for your instance, ie.
+ *     for example instantiate {@link myutil.intboolsolver.IBSStdExpressions
+ *     IBSStdExpressions}:</p>
+       <PRE>
+     known from context (package, imports): intboolsolver,
+         Spec, Comp, SpecState, CompState, State
+
+     public class Exprs
+         extends IBSStdExpressions &lt;Spec,Comp, SpecState, CompState, State&gt; {
+
+           public Exprs(){}
+
+           !!! optionnal additionnal features here
+     }
+ *     </PRE>
+ *     <p>Note that if you want to add features to the inner class <code>Expr</code>,
+ *     you have to directly modify {@link myutil.intboolsolver.IBSStdExpressions
+ *     IBSStdExpressions}.</p>
+ *     </li>
+ *     <li> <p>build the parser <code>Parser</code> for your instance, ie.
+ *     instantiate an implementation of the generic parser:</p>
+ *        <PRE>
+ *      known from context (package, imports): intboolsolver,
+ *          Spec, Comp, SpecState, CompState, State
+ *
+ *      public class Parser
+ *          extends IBSParserImpl &lt;Spec,Comp, SpecState, CompState, State&gt; {
+ *
+ *                 public Parser() { super(new Attrs(),new Exprs()); }
+ *                 public Parser(Attrs _a, Exprs _e) { super(_c,_e); }
+ *
+ *            !!! optional additional features here
+ *      }
+ *        </PRE>
+ *      <p>Note: for the JavaCUP/Jflex parser, the scanner must also be provided
+ *      (see <a href="#javacup">here </a>). {@link myutil.intboolsolver.IBSStdParser
+ *     IBSStdParser} is the provided JavaCUP/Jflex implementation.</p>
+ *      </li>
+ *      <li> <p>Subpackage intboolsolver/closedformula contains a complete instantiation
+ *      for closed formulas. This instantiation is trivial as behaviours for closed
+ *      formulas are the default ones.This instantiation is made of
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedComp IBSClosedComp},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedSpec IBSClosedSpec},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedState IBSClosedState},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedCompState IBSClosedCompState},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedSpecState IBSClosedSpecState},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedFormulaAttributes IBSClosedFormulaAttributes},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedFormulaExpressions IBSClosedFormulaExpressions},
+ *      {@link myutil.intboolsolver.closedformula.IBSClosedFormulaParser IBSClosedFormulaParser}.</p>
+ *      <p>Finally, two wrapper classes are provided that make all features available in
+ *      a single classe and do most of the instance related casts.
+ *     {@link myutil.intboolsolver.closedformula.IBSClosedFormulaSolver IBSClosedFormulaSolver} is
+ *     a static instance of the system that that can be used from anywhere. It is not thread safe.
+ *     {@link myutil.intboolsolver.closedformula.IBSClosedFormula IBSClosedFormula} is dynamic and thus
+ *     must be used through objects. It is then thread safe but be careful: the class is quite big...
+ *     Note that not all features are wrapped in  these classes. In particular, some additional features
+ *     are in {@link myutil.intboolsolver.closedformula.IBSClosedFormulaExpressions
+ *     IBSClosedFormulaExpressions}</p>
+ *      </li>
+ *      <li> <p>There is also an instance dedicated to AVATAR structures, which can be found as an "intboolsolver"
+ *      subpackage of the avatartranslator package of TTool</p></li>
+ * </ol>
+ * <p><a id="instanciation_use"> <b>Typical use of an instantiated parser (without wrapper classes):</b></a></p>
+ *     <PRE>
+ *          public Parser parser = new Parser(new Attribs(),new Exprs());
+ *          Exprs.BExpr e = (Exprs.BExpr) parser.parseBool("10 + 15 &gt;= 20");
+ *          boolean b = e.eval();
+ *          ...
+ *    </PRE>
+ * <p></p>
+ * <hr>
+ * <p><a id="javacup"> <b>The JavaCUP/JFlex provided parser</b></a></p>
+ * <p>A classical JavaCUP/JFlex parser is provided. Sources are in the subdirectory
+ * "javacup" of the intboolsolver package. A script <code>compile</code> is provided to
+ * generate the java code from the source. It relies on <code>sed</code> to make the
+ * small modifyings that cannot be made directly by the generating tools.
+ * Moreover by setting the variables at the beginning of the script,
+ * several different parsers and lexers can be produced (obviously, a lexer can only
+ * be coupled with a parser that defines all the symbols it uses)</p>
+ * <p>Notice that executing this script requires that javacup and jflex jar files
+ * be in the {@code CLASSPATH} environment variable (generally java-cup.jar or
+ * java_cup.jar and jflex.jar).</p>
+ * <p> In fact, two javacup parsers are provided (IBSStdParser.jcup and
+ * IBSOptParser.jcup). They both recognise the same set of usual boolean and integer
+ * expressions. The difference is that IBSOptParser implements constant propagation
+ * while parsing, which may simplify expression, while IBSStdParser does not and thus
+ * globally preserves original structure (provided that expression building primitives
+ * do)</p>
+ *
+ * <i>Script variables : </i>
+ * <ul><li><code>JFLEX_FILE</code>: the lexer jflex source file
+ * </li><li><code>JAVACUP_FILE</code>: the parser java-cup source file
+ * </li><li><code>LEXER_CLASS</code>: the class-and-file name of the generated lexer
+ * </li><li><code>PARSER_CLASS</code>: the class-and-file name of the generated parser
+ * </li><li><code>SYMBOL_CLASS</code>: the class-and-file name of the set of symbols
+ * generated by the parser and used by the lexer.
+ * </li></ul>
+ * <p> The script replaces tags in sources by the parameters provided in variables.
+ * Moreover it restore in the resulting java files the generic parameters that are not
+ * correctly handled by java-cup and jflex.</p>
+ * <ul><li>
+ *     in the lexer source file, <code>IBSLexerClassName</code> is replaced by
+ *     <code>LEXER_CLASS</code> and <code>IBSFlex#Symb</code> is replaced by
+ *     <code>SYMBOL_CLASS</code>. After generation, the generic parameters
+ *     of the lexer class are added in the lexer java file (<code>&lt; Spec extends
+ *     IBSParamSpec, Comp extends IBSParamComp, State extends  IBSParamState,
+ *     SpecState extends IBSParamSpecState, CompState extends IBSParamCompState
+ *     &gt;</code>)
+ * </li><li>
+ *     the generic parameters
+ *     of the parser class are added in the parser generated java file (<code>&lt;
+ *     Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends
+ *     IBSParamState, SpecState extends IBSParamSpecState, CompState extends
+ *     IBSParamCompState &gt;</code>)
+ * </li></ul>
+ * <p>As an example, the instantiation of the standard JFlex/javaCUP parser
+ * for Avatar : </p>
+ * <PRE>
+public class AvatarIBSStdParser extends IBSStdParser&lt;
+        AvatarSpecification,
+        AvatarBlock,
+        AvatarStateMachineElement,
+        SpecificationState,
+        SpecificationBlock&gt; {
+        public AvatarIBSStdParser(AvatarIBSAttributes _a, AvatarIBSExpressions _e) {
+                super();
+                setLexer(new IBSStdLexer&lt;
+                        AvatarSpecification,
+                        AvatarBlock,
+                        AvatarStateMachineElement,
+                        SpecificationState,
+                        SpecificationBlock&gt;());
+                setAttributes(_a);
+                setExpressions(_e);
+        }
+}
+ </PRE>
+ * <p>Tech : the parser methods setAttributes and setExpressions modify
+ * the lexer as these classes are saved as member of the lexer and not
+ * as direct member of the parser. Thus these two methods must be called
+ * each time the lexer is set.</p>
+ *
+ * @version 1.0 11/04/2023
+ * @author Sophie Coudert
+ */
+/** This package implements the generation of SysML V2 textual models from Avatar Models
+ * and the building of Avatar Models from SysML V2 textual models that respect the
+ * structure of Avatar (in fact a strongly constrained sub-language of SysML V2.
+ * <ul>
+ *     <li>Avatar2SysML: generation of SysML V2 models from Avatar Models. This rely on
+ *     <ul>
+ *         <li> The content of the directory "static": libraries for Avatar SysML models</li>
+ *         <li> Avatar2SysMLNames : generates names from Avatar idents that avoid any
+ *         name clash with SysML keywords or fieldname in used SysML libraries </li>
+ *         <li> A parser/lexer couple used to convert Avatar int/bool expressions into
+ *         SysML int/bool expressions </li>
+ *     </ul>
+ *     </li> <li> AvatarFromSysML: building of Avatar Models from Avatar-compatible
+ *     SysML V2 models
+ *     <ul>
+ *         <li> A parser/lexer couple builds an abstract syntax tree. The structures
+ *         used for these trees are defined in AvatarSysMLSyntax.</li>
+ *         <li>AvatarFromSysML then builds an Avatar Model from this abstract
+ *         syntax tree.</li>
+ *         <li> AvatarFromSysMLError is the format for errors collected during this
+ *         process (a list of errors is available at the end of the process) </li>
+ *     </ul>
+ * </ul>
+ */
+package avatartranslator.tosysmlv2;
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml b/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml
new file mode 100644
index 0000000000000000000000000000000000000000..4a2a4e8669687e8d4677cdc687eac5c9018d11dc
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml
@@ -0,0 +1,183 @@
+package AvatarBlockTypes {
+    private import AvatarGeneral::*;
+    private import AvatarCommunication::*;
+    private import AvatarTransitionServer::*;
+    private import States::*;
+
+	abstract attribute def '#AvatarDataType';
+	part def '#AvatarBlock'{
+		item localClock : Clock redefines localClock = systemClock ;
+	}
+	abstract action def '#AvatarMethod';
+    action def '#AvatarVoidMethod' :> '#AvatarMethod';
+    calc def '#AvatarCalcMethod' :> '#AvatarMethod';
+	state def '#AvatarStateMachine'{
+		item localClock : Clock redefines localClock = systemClock ;
+	}
+	action def '#ReceiveAction';
+	action def '#TransitionAction';
+			
+	abstract state def '#AvatarState' {
+        protected item '@pool'[0..*] : '#Request' default '#immediate_request';
+	    protected action '@state_action' default '#nop';
+
+		item localClock : Clock redefines localClock = systemClock ;
+
+	    // the request '@pool'
+	    private state the_state : '#AvatarState' = self;
+	    private part request_pool : '#RequestPool'{
+            occurrence requestor : '#AvatarState' redefines requestor = the_state;
+            public item pool[0..*] redefines pool = the_state.'@pool';
+        }
+	    out item response : '#Response' := '#default_response';
+	    entry action {
+	    	perform '@state_action';
+	    	then action if request_pool.pool != null & request_pool.pool != '#immediate_request'{
+	    		first start;
+	    		then action subsets '#transitionRequestServer'.submit {
+	    			in request_pool redefines request_pool = request_pool;
+	            }
+	            then action receive accept response : '#Response' via the_state;
+	            then assign response := receive.response;
+	            then done;
+	        }
+	        then done;
+	    }
+	}
+	state def '#AvatarStandardState' :> '#AvatarState'{
+		private action '@state_action' redefines '@state_action' = '#nop';
+		protected item '@pool'[0..*] redefines '@pool' default '#immediate_request';
+	}
+	state def '#AvatarStopState' :> '#AvatarState'{
+		private action '@state_action' redefines '@state_action' = '#nop';
+		private item '@pool'[0] redefines '@pool' = null;
+	}
+	state def '#AvatarStartState' :> '#AvatarState'{
+		private action '@state_action' redefines '@state_action' = '#nop';
+	    protected item '@request'[1] redefines '@pool' default '#immediate_request';		
+	}
+	
+	abstract state def '#AvatarCommunicationState' :> '#AvatarState'{
+		private action '@state_action' redefines '@state_action' = '#nop';
+		protected item '@request'[1] redefines '@pool' default '#immediate_request';
+	}
+	state def '#AvatarSendState' :> '#AvatarCommunicationState';
+	state def '#AvatarReceiveState' :> '#AvatarCommunicationState';
+	state def '#AvatarRandomState' :> '#AvatarState' {
+		protected item '@request'[1] redefines '@pool' default '#immediate_request';
+	}
+	state def '#AvatarCountState' :> '#AvatarState' {
+		protected item '@request'[1] redefines '@pool' default '#immediate_request';
+	}
+	abstract state def '#AvatarPreCommunicationState' :> '#AvatarState' {
+		private action '@state_action' redefines '@state_action' = '#nop';
+		protected item '@request'[1] redefines '@pool' default '#immediate_request';
+	}
+	state def '#AvatarPreSendState' :> '#AvatarPreCommunicationState';
+	state def '#AvatarPreReceiveState' :> '#AvatarPreCommunicationState';
+	
+	action def '#AvatarTransition' :> StateTransitionAction {
+         attribute '@index' : Positive = (transitionLinkSource as '#AvatarState').response.'@index';
+         item '@payload' : '#Message' = (transitionLinkSource as '#AvatarState').response.'@payload';
+	}
+
+
+	// states, requests and messages specializations for timers
+
+	state def '#AvatarSetTimerState' :> '#AvatarSendState';
+	state def '#AvatarResetTimerState' :> '#AvatarSendState';
+	state def '#AvatarExpireTimerState' :> '#AvatarReceiveState';
+
+    part def '#AvatarSetTimerRequest' :> '#SendRequest';
+    part def '#AvatarResetTimerRequest' :> '#SendRequest';
+    part def '#AvatarExpireTimerRequest' :> '#ReceiveRequest';
+    
+    part def '#TimerSetMsg' :> '#DataMessage' { attribute value : Integer; }
+    part def '#TimerResetMsg' :> '#DataMessage';
+    part def '#TimerExpireMsg' :> '#DataMessage';
+
+    // Block type for timers
+    part def '#AvatarTimer' :> '#AvatarBlock' {
+
+        private attribute value : Integer := 0;
+
+        private part t_rel: '#Sync_Rel';
+        part '@set' : '#Sync' = '#Sync'('@relation' = t_rel);
+        part '@reset' : '#Sync' = '#Sync'('@relation' = t_rel);
+        part '@expire' : '#Sync' = '#Sync'('@relation' = t_rel);
+
+        // state-machine -------------------
+        exhibit state '@statemachine' : '#AvatarStateMachine' {
+
+            entry action startstate :'#AvatarStartState';
+
+            transition : '#AvatarTransition' first startstate
+                then st_wait4set;
+
+            state st_wait4set : '#AvatarStandardState' = '#AvatarStandardState'(
+                '@pool' = (
+                    '#ReceiveRequest'('@channel'= '@set'),
+                    '#ReceiveRequest'('@index' =  2,'@channel'= '@reset') )
+            );
+
+            transition : '#AvatarTransition' first st_wait4set if '@index' == 1
+                do action : '#ReceiveAction' {
+                    item msg : '#TimerSetMsg' = '@payload' as '#TimerSetMsg';
+                    first start; then assign value := msg.value; then done;
+                } then rcv_set_0;
+
+            transition : '#AvatarTransition' first st_wait4set if '@index' == 2
+                then rcv_reset_2;
+
+            state st_wait4expire : '#AvatarStandardState' = '#AvatarStandardState'(
+                '@pool' = (
+                    '#ReceiveRequest'('@channel'= '@set'),
+                    '#SendRequest'(
+                        '@index' =  2,
+                        '@channel'= '@expire',
+                        '@delay' = value,
+                        '@payload' = '#TimerExpireMsg'()
+                    ),
+                    '#ReceiveRequest'('@index' =  3,'@channel'= '@reset')
+                )
+            );
+
+            transition : '#AvatarTransition' first st_wait4expire if '@index' == 1
+                do action : '#ReceiveAction' {
+                    item msg : '#TimerSetMsg' = '@payload' as '#TimerSetMsg';
+                    first start; then assign value := msg.'value'; then done;
+                } then rcv_set_1;
+
+            transition : '#AvatarTransition' first st_wait4expire if '@index' == 2
+                then snd_expire_0;
+
+            transition : '#AvatarTransition' first st_wait4expire if '@index' == 3
+                then rcv_reset_3;
+
+            state rcv_set_0 : '#AvatarReceiveState';
+
+            transition : '#AvatarTransition' first rcv_set_0
+                then st_wait4expire;
+
+            state rcv_set_1 : '#AvatarReceiveState';
+
+            transition : '#AvatarTransition' first rcv_set_1
+                then st_wait4expire;
+
+            state rcv_reset_2 : '#AvatarReceiveState';
+
+            transition : '#AvatarTransition' first rcv_reset_2
+                then st_wait4set;
+
+            state rcv_reset_3 : '#AvatarReceiveState';
+
+            transition : '#AvatarTransition' first rcv_reset_3
+                then st_wait4set;
+
+            state snd_expire_0 : '#AvatarSendState';
+
+            transition : '#AvatarTransition' first snd_expire_0
+                then st_wait4set;
+        }
+    }
+}
diff --git a/src/main/java/avatartranslator/tosysmlv2/static/AvatarCommunication.sysml b/src/main/java/avatartranslator/tosysmlv2/static/AvatarCommunication.sysml
new file mode 100644
index 0000000000000000000000000000000000000000..9cf3d4b76104ce37ac84db3a44bb4ba1e33510f3
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/static/AvatarCommunication.sysml
@@ -0,0 +1,148 @@
+// AVATAR COMMUNICATION: RELATIONS, MESSAGES AND CHANNELS %%%%%%%%%%%%%%
+
+package AvatarCommunication {
+    private import AvatarGeneral::*;
+    private import AvatarBlockTypes::*;
+    private import Links::SelfLink;
+
+// AVATAR COMMUNICATION RELATIONS ======================================
+
+    abstract part def '#Relation' {
+        doc /* #Relation correspond to Avatar Relation Class. They provide avatar communication
+         * channels with types (blocking/non blocking fifos or synchroneous channels). Avatar
+         * relations have two end blocks but this is not usefull in our SysML modeling, thus
+         * it will be true in instances but not required by SysML #Relation description.
+         * Avatar AMS relations are not modeled. Broadcast is removed before generation and
+         * thus not appear here. Relations may also make channels private.
+         */
+        comment RelationPartition about '#Sync_Rel', '#Fifo_Rel', '#Relation'
+            /* #Sync_Rel, #Fifo_Rel is a partition of #Relation */
+        // attribute source
+        attribute '@private' : Boolean default false;
+        part '@block1' : '#AvatarBlock';
+        part '@block2' : '#AvatarBlock';        
+
+    }
+
+    part def '#Sync_Rel' :> '#Relation' {
+        doc /* #Sync_Rel correspond to Avatar synchroneous relations */
+    }
+    
+    abstract part def '#Fifo_Rel' :> '#Relation'  {
+        doc /* #Fifo_Rel define Avatar asynchroneous relations, i.e., they label fifo channels */
+        comment Fifo_Rel_Partition about '#Fifo_Rel', '#Bfifo_Rel', '#NBfifo_Rel'
+            /* #Bfifo_Rel, #NBfifo_Rel is a partition of #Fifo_Rel */
+        readonly attribute '@lossy' : Boolean default false;
+        readonly attribute '@max_size': Positive default 1;
+        assert constraint { '@max_size' > 0 }
+    }
+    
+    part def '#Bfifo_Rel' :> '#Fifo_Rel'{
+        doc /* #BFifo_Rel correspond to fifos with blocking send */
+    }
+
+    part def '#NBfifo_Rel' :> '#Fifo_Rel'{
+        doc /* #NBFifo_Rel correspond to fifos with non-blocking send */
+    }
+    
+// AVATAR COMMUNICATION MESSAGES ==========================================
+
+    abstract item def '#Message' { 
+        doc /* the type of all messages */
+        comment MessagePartition about '#AckMessage', '#DataMessage'//, '#Channel', '#ack'
+            /* Channels convey messages that can be either data messages or the (unique)
+             * acknowledgment message (Partition)
+             */
+    }
+    
+    individual item def '#AckMessage' :> '#Message' { doc /* A single acknowledgment message is sufficient */ }
+    
+    part def '#DataMessage' :> '#Message' { doc /* Data messages are used to exchange data between tasks */ }
+    part def '#InMessage' :> '#DataMessage';
+    part def '#OutMessage' :> '#InMessage';
+        
+    individual item '#ack_message' : '#AckMessage' { doc /* the (single) acknowledgment message */ }
+
+
+
+// AVATAR COMMUNICATION CHANNELS ==========================================
+
+    abstract part def '#Channel' {
+        doc /* Communication channels are typed by relations */
+        readonly part '@relation' : '#Relation';
+    }
+    
+    /* Fifos have a list as internal state and usual behaviour */
+    abstract part def '#Fifo' :> '#Channel' {
+
+        readonly part '@relation' : '#Fifo_Rel' redefines '@relation';
+        private item fifo : '#Message'[0..*] ordered nonunique := null ;
+        assert constraint { size(fifo) <= '@relation'.'@max_size' }
+        
+        calc '@amount' { return : Positive := size(fifo); }
+    
+        calc can_get { return : Boolean; notEmpty(fifo) }
+        calc can_put { return : Boolean; size(fifo) < '@relation'.'@max_size' }
+    
+        calc get {
+            doc /* remove head of fifo and return it */
+            return result : '#Message' redefines result;
+            snapshot start redefines start { assert constraint { can_get() } }
+            then action assign result := head(fifo);
+            then action assign fifo := tail(fifo);
+            then done;
+        }
+    
+        action put { 
+            doc /* add message at end of fifo. if the fifo is full the message is discarded */
+            in 'message' : '#Message';
+
+            first start then begin;
+    
+            decide begin;
+                if can_put() then do_put;
+                else done;
+    
+            decide do_put;
+                if '@relation'.'@lossy' then may_loss;
+                else enqueue; 
+    
+            decide may_loss; // random choice
+                then done;
+                then enqueue;
+
+            action enqueue : addAt {
+                inout seq = fifo;
+                in values = 'message';
+                in startIndex = size(fifo)+1;
+            }
+            then done;
+        }
+    }
+    
+    part def '#Bfifo' :> '#Fifo' {
+        public readonly item '@relation' : '#Bfifo_Rel' redefines '@relation';
+        action put redefines put { snapshot start redefines start { assert constraint { can_put() } } }
+    }
+    
+    part def '#NBfifo' :> '#Fifo' {
+        public readonly item '@relation' : '#NBfifo_Rel' redefines '@relation';
+    }
+    
+    part def '#Sync' :> '#Channel' {
+        public readonly item '@relation' : '#Sync_Rel' redefines '@relation';
+    }
+        
+    comment Channel_Partition about '#Bfifo', '#NBfifo', '#Sync'
+        /* #Bfifo, #NBfifo, #Sync is a partition of #Channel.
+        Disjointness is ensured by #Fifo_Rel and #Channel partitions */
+    
+	connection  def '#InSignalBinding' :> SelfLink {
+	    end part sameThing : '#Channel' redefines sameThing;
+	    end part thisThing : '#Channel' redefines thisThing;
+	}
+	connection  def '#OutSignalBinding' :> SelfLink {
+	    end part sameThing : '#Channel' redefines sameThing;
+	    end part thisThing : '#Channel' redefines thisThing;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/tosysmlv2/static/AvatarGeneral.sysml b/src/main/java/avatartranslator/tosysmlv2/static/AvatarGeneral.sysml
new file mode 100644
index 0000000000000000000000000000000000000000..fd666669d8977588145c7b87c857d1679a7f9ec4
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/static/AvatarGeneral.sysml
@@ -0,0 +1,174 @@
+package AvatarGeneral { 
+    public import Base::Anything;
+    public import ScalarValues::Positive;
+    public import ScalarValues::Integer;
+    public import ScalarValues::Boolean;
+    public import ScalarValues::String;
+    public import ScalarValues::Real;
+    public import Occurrences::HappensJustBefore;
+    public import SequenceFunctions::*;
+    public import Clocks::Clock;
+    
+    // Assignment =======================================
+    action def '#Assignment' {
+	    inout '@target' : Anything[0..*] nonunique;
+	    in '@value' : Anything[0..*] nonunique;
+	    first start; then assign '@target':= '@value'; then done;
+    }
+    
+    // SETS AND RANDOMS =============================================================
+
+    calc '#bound_random' {
+        doc /* A primitive to get a random number between two bounds */
+
+        in low : Integer;
+        in high : Integer;
+        return result: Integer;
+        snapshot start redefines start {assert constraint { low <= high }}
+        snapshot done redefines done {assert constraint { result >= low & result <= high }}
+    }
+
+    calc def '#Unary_predicate' {
+        doc /* A unary predicate is a predicate with one single parameter */
+        in parameter : Anything;
+        return result : Boolean;
+    }
+
+    action def '#Unary_action' {
+        doc /* A unary action is an action with one single parameter */
+        in parameter : Anything;
+    }
+
+    calc '#identity' {
+        doc /* To build a predicate that tests if a value is equal to another one */
+        in tgt : Anything;
+        return : '#Unary_predicate' = pred;
+        calc pred : '#Unary_predicate' {
+            in parameter : Anything redefines parameter;
+            return result : Boolean;
+            parameter == tgt
+        }
+    }
+
+    action '#unary_nop' : '#Unary_action' {
+        doc /* A unary action that does nothing */
+        succession immediate :  HappensJustBefore first start then done;
+    }
+
+    calc '#unary_true' : '#Unary_predicate' {
+    	doc /* A unary predicate that always return true */
+        succession immediate :  HappensJustBefore first start then done;
+        assign result := true;
+    }
+
+	action '#nop' { doc /* the action which does nothing */ }
+	
+    action '#multiset_iter' {
+        doc
+            /* A general purpose tool to iter tests and actions on elements of a multiset represented
+            * by an ordered list
+            */
+        in multiset : Anything[0..*] ordered nonunique;       // the multiset on which to iter
+        in pred : '#Unary_predicate'  default '#unary_true';  // to select elements
+        in pre_act : '#Unary_action'  default '#unary_nop';   // to apply on all elements, before if_act
+        in if_act : '#Unary_action'   default '#unary_nop';   // to apply on selected elements
+        in post_act : '#Unary_action'  default '#unary_nop';   // to apply on all elements, after if_act
+        out selected : Anything[0..*];                        // all x in s satisfying pred(x)
+        out discarded : Anything[0..*];                       // all x in s satisfying not pred(x)
+        attribute accepted : Boolean;
+        
+        first start then iter;
+        action iter for i : Positive in 1..multiset -> size() {
+            
+            first start then select;
+            action select 
+                if pred(multiset#(i)) { 
+                    first start; 
+                    then assign accepted := true;
+                }
+                else { 
+                    first start;
+                    then assign accepted := false;
+                    then assign discarded := (discarded,multiset#(i));
+                }
+            then do_actions;
+            action do_actions {
+                first start;
+                then action subsets pre_act{ in parameter = multiset#(i); }
+                then if accepted { 
+                    first start;
+                    then action subsets if_act { in parameter = multiset#(i); }
+                    then done;
+                }
+                then action subsets post_act { in parameter = multiset#(i); }
+                then done;
+            } then done;
+        } then done;
+    }
+
+    calc '#multiset_random' {
+        doc /* A function that randomly returns an element of a (parameter) multiset */
+        in multiset : Anything[0..*] ordered; // the set from which an element is expected
+        out : Anything[0..1] := if multiset == null? null else multiset#('#bound_random'(1,size(multiset)));
+    }
+    
+    action '#multiset_remove' {
+        doc
+            /* A tool for removing elements from a multiset */
+            
+        inout multiset : Anything[0..*] ordered nonunique;       // the multiset to update
+        in pred : '#Unary_predicate';  // to select elements to remove
+        
+        perform action iter subsets '#multiset_iter' {
+        	in multiset redefines multiset = multiset;
+        	in pred redefines pred = pred;
+        }
+        then assign multiset := iter.discarded;
+    }
+    
+    calc '#multiset_exists' {
+        doc
+            /* A tool for testing if some elements of a multiset satisfy a predicate */
+            
+        in multiset : Anything[0..*] ordered nonunique;       // the multiset to update
+        in pred : '#Unary_predicate';  // to select elements to remove
+        
+        perform action iter subsets '#multiset_iter' {
+        	in multiset redefines multiset = multiset;
+        	in pred redefines pred = pred;
+        }
+        iter.selected != null
+    }
+
+    // LOCK FOR MUTUAL EXCLUSION ===================================================
+
+    part def '#Lock' {
+        doc /* A simple semaphore with size 1, to protect critical sections */
+        private attribute locked : Boolean := false;
+
+        action lock {
+            doc /* To take the helm. Blocks until the protected ressource is available */
+            comment
+                /* In this action, assignments actions are atomic, immediate succession s
+                * (HappensJustBefore) correctly handles concurrency */
+            attribute success : Boolean;
+            first start;
+            then action wait accept when not locked;
+            then action test_lock assign success := not locked;
+            succession s : HappensJustBefore first test_lock then do_lock;
+            action do_lock assign locked := true;
+        }
+        
+        action unlock {
+            doc /* To release the protected ressource */
+            first start; then assign locked := false;
+        }
+    }
+    
+    // SYSTEM SHARED CLOCK FOR DISCRETE TIME ================================
+    
+	item systemClock : Clock { 
+		doc /* a system level discrete clock to handle delays */
+		currentTime : Integer redefines currentTime;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/tosysmlv2/static/AvatarTransitionServer.sysml b/src/main/java/avatartranslator/tosysmlv2/static/AvatarTransitionServer.sysml
new file mode 100644
index 0000000000000000000000000000000000000000..32b3ace50127662285e3cb3333dec830571379a3
--- /dev/null
+++ b/src/main/java/avatartranslator/tosysmlv2/static/AvatarTransitionServer.sysml
@@ -0,0 +1,652 @@
+// AVATAR CENTRALIZED TRANSITION SERVER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+package AvatarTransitionServer {
+    private import Clocks::TimeOf;
+    private import Time::TimeInstantValue;
+    private import AvatarGeneral::*;
+    private import AvatarCommunication::*;
+    public import Occurrences::Occurrence;
+
+	doc /* The server is used to select a transition to execute among the possible outgoing transitions 
+	 * of a state of an Avatar block statemachine. For this, states will submit pools of requests to 
+	 * the server, where each request is associated to one of its outgoing transitions. Then, as soon
+	 * as some requests in the pool are feasible, the server chose one of them and send a response to
+	 * the state identifying the selected request and providing the associated '@payload' (transmitted 
+	 * message for receiving requests, and acknowledgment in other cases)
+	 */
+	 
+// AVATAR TRANSITION REQUESTS ============================================
+
+	abstract part def '#Request' {
+		doc /* The most general request type. Outgoing transition from a state are statically ordered.
+		 * Thus associated requests have an index w.r.t this order, which identifies the request they
+		 * are associated to.
+		 */
+	
+    	readonly attribute '@index' : Positive default 1;
+    	
+    	comment Request_Partition about '#OKrequest', '#NOKrequest', '#Request'
+    	/* Requests are either certainly unfeasible (a #NOKrequest has false guard)
+     	 * or potentially feasible (an #OKrequest has true guard)
+     	 * #OKrequest, #NOKrequest is a partition of #Request
+     	 */
+    }
+    
+	part def '#NOKrequest' :> '#Request' {
+		doc /* Certainly unfeasible requests, i.e. requests with false guard.
+		 * they cannot be selected by the centralized server.
+		 */
+	}
+    calc '#nok_request' {
+        in '@index' : Positive;
+        return : '#NOKrequest' { 
+            attribute '@index' redefines '@index' = '@index';
+        }
+    }
+
+	abstract part def '#OKrequest' :> '#Request' {
+		doc /* Potentially feasible requests, i.e. requests with true guard.
+		     * they may be selected by the centralized server.
+   			 * They may be '@delay'ed by an "after", thus they have a trigger date w.r.t
+   			 * the system discrete clock.
+   			 */
+	    
+	    item localClock : Clock redefines localClock = systemClock ;
+	    readonly attribute '@delay' : Positive default 0;
+	    derived attribute trigger_at = TimeOf(clock=localClock, o=self) + '@delay';
+
+		comment OKrequest_Partition about '#OKrequest', '#TrivialRequest', '#CommunicationRequest'
+    		/* OK requests may be without dependency and thus Trivialially feasible (#TrivialRequest). 
+    		 * Non Trivialial requests are the ones associated to communication (#CommunicationRequest).
+    		 * They may require synchronization, or channel or data to be available.
+    		 * #TrivialRequest, #CommunicationRequest, is a partition of #OKrequest 
+    		 */
+	}
+    
+	part def '#TrivialRequest' :> '#OKrequest'{
+		doc /* Trivialial requests don't communicate, thus don't block. Associated transitions
+	     * only execute actions such as assignment, external method calls,...
+	     */
+	}
+	
+	item '#immediate_request' : '#TrivialRequest' = '#TrivialRequest'();
+	
+	abstract part def '#CommunicationRequest' :> '#OKrequest' {
+		doc /* Communication requests, which have an associated communication channel.
+		 * They may block until some ressource is available, depending of the kind of channel
+		 */
+
+    	readonly item '@channel' : '#Channel';
+    	readonly attribute is_send : Boolean {
+    		doc /* request direction, which is redoundant with #CommunicationRequest 
+    		 * specializations but useful to factor some descriptions in the model
+    		 */
+		}
+
+		comment about '#CommunicationRequest', '#SendRequest', '#ReceiveRequest'
+		    /* communication requests have a direction: they are "send" or "receive". 
+		     * #SendRequest, #ReceiveRequest, is a partition of #CommunicationRequest
+		     */
+    }
+
+	part def '#SendRequest' :> '#CommunicationRequest' {
+		doc /* Requests for sending. They have have a '@payload' (message) */
+		
+	    readonly item '@payload' : '#Message';
+	    readonly attribute is_send redefines is_send = true;
+	}
+	
+	part def '#ReceiveRequest' :> '#CommunicationRequest' {
+		doc /* Requests for receiving */
+		
+	    readonly attribute is_send redefines is_send = false;
+	}
+	
+	part def '#RequestPool' {
+		doc /* Pools of requests. They contain one request per outgoing transition of the
+		 * state they are associated to. They have an associated requestor identifying 
+		 * who to send the response to (generally the block whose statemachine contains 
+		 * the state)
+		 */
+		 
+	    occurrence requestor : Occurrence;
+	    item pool : '#Request'[0..*] ordered default '#immediate_request';
+	    
+	    assert constraint {
+	    	doc /* Request indexes correspond to their range in the pool. This is a redoundancy which
+	    	 * makes the model more simple. 
+	    	 * Moreover, all transitions from the concerned state in Avatar model have a corresponding 
+	    	 * request , which cannot be expressed here as it is a constraint on the software which 
+	    	 * generates the Avatar SysMLV2 model
+	    	 */
+	    	calc test {
+	    	 	first start;
+	    	 	then assign result := true;
+	    	 	then for i in 1..size(pool) { 
+	    	 		first start;
+	    			then assign result := result & pool#(i).'@index' == i;
+	    		}
+	    	}
+	    	test()
+	    }
+		 
+	}
+
+// AVATAR RESPONSES TO REQUESTS ============================================
+	item def '#Response' {
+		doc /* Response to submitted request pool.
+		 * Once a request in a pool is satisfied, the server sends a response to
+	 	 * the requestor associated to the pool. This response identifies the
+	 	 * (index of the transition corresponding to the) satisfied request in 
+	 	 * the pool and carry some '@payload'. A '@payload' is a message (which can be
+	 	 * a simple acknowledgement).
+	 	 * Remark: As a resquestor should not have more than one pending request
+	 	 * pool in the server, this information is sufficient to root the response
+	 	 * to a unique well identified waiting accept action.
+	 	 */
+		
+	    attribute '@index' : Positive default 1;
+	    item '@payload' : '#Message' default '#ack_message';
+	}
+	item '#default_response' = '#Response'();
+
+// THE SERVER ITSELF ========================================================
+
+	part '#transitionRequestServer' {
+		doc /* The transition request server. 
+		 * General Principle: all submitted requests are initially considered as 
+		 * '@delay'ed (even if their '@delay' is 0, for homogeneity). '@delay'ed requests
+		 * wake up themself at their "trigger_at" date and launch the server's
+		 * request handler on themself. The handler try to execute the request 
+		 * which may lead either to successfull or blocking issue.
+		 * A request wake up once and only once. After this, if it is blocked 
+		 * (pending communication), it remains in the pending requests but is 
+		 * removed from the '@delay'ed requests. Such requests may then be unblocked 
+		 * by the wake-up of a dual request (a send for a receive or a receive for 
+		 * a send), or discarded if some other request in their pool is selected 
+		 * to be executed. Pools may also wait forever...
+		 * 
+		 * The server maintains two sets of pending pools:
+		 * - general pending pools are all pending pools, containing all 
+		 *   pending requests
+		 * - '@delay'ed pending pools (each one associated to a general pending pools)
+		 *   are pools containing '@delay'ed requests, and only '@delay'ed requests.
+		 * 
+		 * When a pool is submitted by a state, it is added to both sets. 
+		 * When a '@delay'ed request wake up, it is removed from its '@delay'ed pool (which 
+		 * is removed when becomming empty -- facultatif) and if handling 
+		 * this request leads to a success, all involved pools are removed from
+		 * both sets and relevant responses are send to the involved communicating 
+		 * ends (which pools and which responses depends on channel types).
+		 */
+		 
+		item localClock : Clock redefines localClock = systemClock ;
+		private individual item def Kill { doc /* type of the local kill signal */ }
+		private individual item kill : Kill {
+		 	doc /* The local kill signal to be sent to '@delay'ed requests when 
+		 	 * their pool is deleted because some other request in the pool 
+		 	 * is executed
+		 	 */
+		}
+		private item mutex : '#Lock';
+    	private item request_pools : '#RequestPool'[0..*] ordered {
+    	 	doc /* general pending pools containing requests waiting for wake up 
+    	 	 * or available ressources
+    	 	 */
+    	}
+   		protected item delayed_pools : '#delayedPool'[0..*] ordered {
+    		doc /* '@delay'ed pending pools containing requests waiting for wake up */
+    	}
+		
+		part def '#delayedPool' {
+			doc /* Type of pools containing '@delay'ed requests. Such pools are
+			 *  associated to the general request pool that contain their requests.
+			 */
+    		item request_pool : '#RequestPool';
+    		item delayed_requests : '#delayedRequest'[0..*] ordered;
+		}
+
+		part def '#delayedRequest' {
+			doc /* (operational) structure for '@delay'ed requests */
+
+    		attribute trigger_at : Positive, TimeInstantValue { doc /* The date at which to wake up */ }
+    		item delayed_pool : '#delayedPool' { doc /* the '@delay'ed pool the request belongs to */}
+    		attribute '@index' : Positive;
+    		
+    		private readonly item myself = self; // technical... to be referenced in sub-components
+		    protected item delayed_pools : '#delayedPool'[0..*] ordered = '#transitionRequestServer'.delayed_pools;
+		    // apparently required !?!
+    
+		    state statemachine { 
+		    	doc /* waits for wake up or kill */
+		        entry; then state wait;
+		        transition first wait accept Kill then done;
+		        transition first wait accept at trigger_at
+		          do action {
+		            perform action remove_request subsets 
+		            	'#multiset_remove' {
+		                	in multiset redefines multiset = delayed_pool.delayed_requests; 
+		                    in pred redefines pred = '#identity'(myself); 
+		                 }
+                    then if delayed_pool.delayed_requests == null {
+ 		            	 	perform action remove_delayed_pool subsets 
+		            		'#multiset_remove' {
+		                		in multiset redefines multiset = delayed_pools; 
+		                    	in pred redefines pred = '#identity'(delayed_pool); 
+		                 	} then done;
+		                 }
+		            then action wake_up subsets '#transitionRequestServer'.request_wake_up { 
+		                        in request_pool redefines request_pool = delayed_pool.request_pool; 
+		                        in transition_id redefines transition_id = transition_id; 
+		                 }
+           		  }
+				  then done;
+		    }
+		    first statemachine then done;
+		}
+		
+		// FOR SUBMITTING A REQUEST POOL ==========================================
+
+		action submit { // add parameter pool to request_pools and delayed_pools
+			in request_pool : '#RequestPool';
+			part delayed_pool : '#delayedPool' { 
+     			item request_pool : '#RequestPool' redefines request_pool = request_pool;
+    			item delayed_requests : '#delayedRequest'[0..*] redefines delayed_requests := null;
+    		}
+    		first start; then perform mutex.lock;
+    		for i in 1..size(request_pool.pool) {
+    			if request_pool.pool#(i) hastype '#OKrequest' { // build '@delay'ed request for ith request
+    				item request := request_pool.pool#(i) as '#OKrequest';
+    				part delayed_request : '#delayedRequest' {
+    					in trigger_at redefines trigger_at = request.trigger_at;
+    					in delayed_pool redefines delayed_pool = delayed_pool;
+    					in '@index' redefines '@index' = request.'@index';
+    				}
+    				first start; then // add '@delay'ed request
+    				assign delayed_pool.delayed_requests := (delayed_pool.delayed_requests,delayed_request);
+    				then delayed_request.start;
+    			}
+    		} 
+    		then assign request_pools := (request_pools, request_pool); // add general request pool
+    		then if delayed_pools.delayed_requests != null {
+    			assign delayed_pools := (delayed_pools, delayed_pool);
+    		} // add '@delay'ed request pool if not empty
+    		then perform mutex.unlock;
+    		then done;
+		}
+		
+		// REQUEST WAKE UP: tries request synchronization if request has not already been handled
+		
+		comment about request, request_pool /* ALGORITHMIC VARIABLES: inputs for trying a synchronization */
+    	protected part request : '#Request'{ doc /* ALGORITHMIC VARIABLE : the request to be synchronized */ }
+    	protected part request_pool : '#RequestPool'{ doc /* tALGORITHMIC VARIABLE :he pool of the request to be synchronized */ }
+
+		action request_wake_up { 
+			doc /* verifies that request has not already been synchronized and if not, try to synchronize it */
+		    in request_pool : '#RequestPool'; 
+		    in transition_id : Positive;
+		    
+		    first start; then perform mutex.lock;
+		    then perform action todo subsets '#multiset_exists'{ 
+		    	in multiset redefines multiset = request_pools; 
+		    	in pred redefines pred = '#identity'(request_pool); }
+		    then if todo.result { 
+		    	first start;
+		    	then assign request := request_pool#(transition_id);
+		    	then assign request_pool := request_pool;
+		    	then perform try_request_synchronization;
+		    }
+		    then perform mutex.unlock;
+		    then done;
+		}
+
+        action try_request_synchronization {
+            first start;
+            then perform search_request_synchronization;
+            then perform remove_request_pools;
+            then perform send_mails;
+            then done;
+		}
+            
+		// SUBROUTINE : removing synchronized pending pools =========================
+		
+		item pools_to_remove : '#RequestPool'[0..2] { 
+			doc /* ALGORITHMIC VARIABLE: synchronized pools, i.e associated to synchronized
+			 * requests. Updated when finding a synchronization. Removed from pending  pools
+			 * when executing this synchronization.
+			 */
+		}
+
+	    protected action remove_request_pools { 
+	    	doc /* Removing pools in pools_to_remove, i.e removing them from both sets of
+	    	 * pending pools (general and '@delay'ed). This also kills the process in '@delay'ed 
+	    	 * requests which are waiting for either a trigger signal or a kill signal.
+	    	 */
+	    	 
+	        // subroutine
+            action kill_delayed_pool_requests : '#Unary_action' { 
+            	doc /* kill all waiting requests of a parameter '@delay'ed pool */
+                in parameter : '#delayedPool';
+                first start;
+                then for r in parameter.delayed_requests { first start; then send kill to r; }
+            }
+
+			first start;
+	        then for p : '#RequestPool' in pools_to_remove {
+	        	
+	        	// subroutine
+		        calc has_request_pool : '#Unary_predicate' { 
+		        	doc /* test if the request pool of a parameter '@delay'ed pool is p */
+		        	in parameter : '#delayedPool'; parameter.request_pool == p
+		        }
+		        
+	            first start;
+	            then action remove_request_pool subsets '#multiset_remove' { // remove pool from general pending pools
+	                in multiset redefines multiset = request_pools; 
+	                in pred redefines pred = '#identity'(p); 
+	            }
+				then action remove_delayed_pool subsets  '#multiset_iter' { 
+	                in multiset redefines multiset = delayed_pools; 
+	                in pred redefines pred = has_request_pool; 
+	                in if_act redefines if_act = kill_delayed_pool_requests; 
+	            }
+	            succession flow remove_delayed_pool.discarded to update_delayed_pools.new_delayed_pools;
+	            action update_delayed_pools {
+	                in new_delayed_pools  : '#RequestPool'[0..*];
+	                first start; then assign delayed_pools := new_delayed_pools; then done;
+	            }
+	        }
+	        then done;
+	    }
+		
+		// SUBROUTINE: sending responses to requestors =============================
+
+	    protected part def '#Mail' { 
+	    	doc /* Response computed while finding synchronizations have an associated recipient,
+	    	 * This characterizes mails.
+	    	 */
+	        item recipient: Occurrence;
+	        item response: '#Response';
+	    }
+	    
+        item mails_to_send : '#Mail'[0..2] {
+        	doc /* ALGORITHMIC VARIABLE: mails associated to synchronized requests. Updated 
+        	 * when finding a synchronization. Responses are sent to recipients when executing 
+        	 * this synchronization.
+			 */
+        }
+
+    	protected action send_mails {
+    		doc /* send responses to requestors of synchronized requests */
+    		first start;
+        	then for i : Positive in 1..size(mails_to_send) {
+            	first start;
+            	then send mails_to_send#(i).response to mails_to_send#(i).recipient;
+            	then done;
+        	}
+        }
+
+	    // SUBROUTINE searching a dual request for current request in pending requests ===============
+	
+	    private part dual_request : '#Request'[0..1]{
+	    	doc /* selected dual pending request of the current request, 
+	         * among the found ones
+	         */
+	    }
+	    private part dual_request_pool : '#RequestPool'[0..1] {
+	    	doc /* ALGORITHMIC VARIABLE: the pool containing the selected dual pending 
+	    	 * request of the current request.
+	    	 */
+	    }
+	
+	    action search_pending_dual_request {
+		    doc /* search for a dual request of current request in request_pools.
+		     * updates dual_request and dual_request_pool accordingly. If no dual request 
+		     * is found, they are set to null. If severall are found, one is choosed
+		     * randomly.
+		     * Dual requests are communication requests on a same channel with opposite 
+		     * directions
+		     */
+			
+	        comment about dual_requests, dual_request_pools
+	            /* order in these two items are parallel: i-th request belongs to i-th pool */
+	
+	        part dual_requests : '#Request'[0..*] := null{
+	        	doc /* found requests that are dual of current request */
+			}
+	        
+	        part dual_request_pools : '#RequestPool'[0..*] := null {
+	        	doc /* the pools containing dual requests in dual_requests, in the same order */
+	        }
+	               
+	        first start;
+	        then assign dual_requests := null;
+	        then assign dual_request_pools := null;
+	        then decide;
+	        	if request hastype '#CommunicationRequest' then search;
+	        	else done;
+	        	
+	        item communication_request[0..1] : '#CommunicationRequest' := request as '#CommunicationRequest';
+	        
+	        action search assign dual_request := null;
+	        then assign dual_request_pool := null;
+	        then for p : '#RequestPool' in request_pools {
+	            item found : '#Request'[0..*] := null; // dual requests in pool p
+	            first start;
+	            then for r : '#Request' in p.pool {
+	            	if r hastype '#CommunicationRequest' {
+	            		item req = r as '#CommunicationRequest';
+	            		first start;
+	                	then if communication_request.'@channel' == req.'@channel' and 
+	                        	communication_request.is_send != req.is_send and
+	                        	communication_request.trigger_at >= localClock.currentTime
+	                     { first start; then assign found := (found,r); then done; }
+	                }
+	            }
+	            then if found != null {
+	            	first start;
+	                then assign dual_request_pools := (dual_request_pools, p);
+	                then assign dual_requests := (dual_requests,'#multiset_random'(found));
+	                then done;
+	            }
+	            then done;
+	        }
+	        then if dual_requests != null { // randomly select one of the possible dual requests
+	        		attribute x : Positive := '#bound_random'(low=1, high=size(dual_requests));
+	            	first start;
+	            	then assign dual_request_pool:= dual_request_pools#(x);
+	                then assign dual_request:= dual_requests#(x);
+	             }
+	             else {
+	                first start;
+	                then assign dual_request_pool:= null;
+	                then assign dual_request:= null;
+	             }
+	        then done;
+	    }
+	
+	    // SUBROUTINE add an acknowledgement for a couple (pool,request)
+	    
+	    action acknowledge {
+	    	doc /* add acknowledgement in mails_to_send and pools_to_remove */
+	        in request_pool : '#RequestPool';
+	        in request : '#Request';
+	        first start;
+	        then assign mails_to_send := ( mails_to_send,
+	        	'#Mail'( recipient = request_pool.requestor,
+	                     response = '#Response'('@index' = request.'@index',
+	                                            '@payload' = '#ack_message') ) );
+	        then assign pools_to_remove := (pools_to_remove, request_pool);
+	    }
+	
+	    // SEARCH A SYNCHRONIZATION FOR request ==============================
+	    
+	    action search_request_synchronization { 
+	    	doc /* search a synchronization for current request and updates mails_to_send
+	    	 * and pools_to_remove accordingly. If no synchronization is found, both
+	    	 * variables are set to null.
+	    	 */
+			first start;
+			then assign mails_to_send := null;
+			then assign pools_to_remove := null;
+	        then decide select_wrt_request_type;
+	            if request hastype '#NOKrequest' then done;
+	            if request hastype '#TrivialRequest' then trivial_synchro;
+	            else communication_synchro;
+			
+	        // Synchronization of Trivialial actions --------------------------------
+	        action trivial_synchro subsets acknowledge {
+	        	doc /* Trivialial actions are always synchronized (with no other pool) and simply return 
+	        	 * an acknowledgment
+	        	 */
+	        	in request_pool redefines request_pool;
+	        	in request redefines request;
+	        }
+	        then done; // end of trivial_synchro : search_request_synchronization returns
+	        
+	        // Synchronization of communication requests, depends on channel type ----
+	        item communication_request[0..1] : '#CommunicationRequest' := request as '#CommunicationRequest';
+	        decide communication_synchro;
+	            if communication_request.'@channel' hastype '#Fifo' then fifo_synchro;
+	            else sync_synchro;
+	            
+	        // Synchronization of communication requests on fifo channel ------------
+	        action fifo_synchro {
+	        	item fifo : '#Fifo' := communication_request.'@channel' as '#Fifo';
+	        	first start;
+	            then decide select_wrt_communication_direction;
+	                if request hastype '#SendRequest' then send_synchro;
+	                else receive_synchro;
+	            
+	            action send_synchro {
+	            	item send_request : '#SendRequest' := communication_request as '#SendRequest';
+	            	first start;
+	                then decide test_if_lossy;
+	                    if fifo.'@relation'.'@lossy' == true then lossy_synchro;
+	                    else noloss_synchro;
+	                
+	                decide lossy_synchro; // loss or not, random choice
+	                    then loss_synchro;
+	                    then noloss_synchro;
+	                    
+	                action loss_synchro subsets acknowledge {
+	                	in request_pool redefines request_pool = request_pool;
+	                	in request redefines request = request;
+	                }
+	                then done;
+	                
+	                action noloss_synchro {
+	                	first start;
+	                    then decide test_if_full;
+	                        if fifo.can_put() then put_synchro;
+	                        else full_synchro;
+	                    
+	                    decide full_synchro; // test if blocking
+	                        if fifo hastype '#NBfifo' then discard_synchro;
+	                        else done;
+	                               
+		                action discard_synchro subsets acknowledge {
+		                	in request_pool redefines request_pool = request_pool;
+		                	in request redefines request = request;
+		                }
+		                then done;
+		                
+	                    action put_synchro {
+	                        first start;
+	                    	then action put subsets fifo.put {
+	                    		in 'message' redefines 'message' = send_request.'@payload';
+	                    	}
+	                        then action ack subsets acknowledge {
+	                			in request_pool redefines request_pool = request_pool;
+	                			in request redefines request = request;
+	                		}
+	                        then perform search_pending_dual_request;
+	                        then
+	                        if dual_request != null {
+	                            first start;
+								then assign pools_to_remove := (pools_to_remove,dual_request_pool);
+	                            then assign mails_to_send := (mails_to_send,
+	                                 '#Mail'( recipient = dual_request_pool.requestor,
+	                                          response = '#Response'( '@index' = dual_request.'@index',
+	                                                                  '@payload' = fifo.get() )));
+	                            then done;
+							}
+	                    } then done;
+	                } then done; 
+	            } then done; // end of send_synchro : fifo_synchro returns
+	            
+	            action receive_synchro {
+	                first start;
+	                then if fifo.can_get() {
+	                    first start;
+	                    then assign mails_to_send := 
+	                         '#Mail'( recipient = request_pool.requestor,
+	                                 response = '#Response'('@index' = communication_request.'@index',
+	                                                        '@payload' = fifo.get() ));
+	                    then assign pools_to_remove := request_pool;
+	                    then perform search_pending_dual_request;
+	                    then
+	                    if dual_request != null {
+	                        first start;
+	                        then assign pools_to_remove := (pools_to_remove,dual_request_pool);
+	                        then action ack subsets acknowledge {
+	                            in request_pool redefines request_pool = dual_request_pool;
+	                            in request redefines request = dual_request;
+	                        } then done;
+	                    } then done;
+	                } then done;
+	            } then done; // end of receive_synchro : fifo_synchro returns
+	        } then done; // end of fifo_synchro : search_request_synchronization returns
+	
+	        // Synchronization of communication requests on synchroneous channel ------------
+	        action sync_synchro {
+	            first start;
+	            then decide select_wrt_communication_direction;
+	                if communication_request hastype '#SendRequest' then send_synchro;
+	                else receive_synchro;
+	            
+	            action send_synchro {
+	                first start;
+	                then perform search_pending_dual_request;
+	                then
+	                if dual_request != null {
+                    	item send_request : '#SendRequest' = request as '#SendRequest';
+	                    first start;
+	                    then action ack subsets acknowledge {
+	                        in request_pool redefines request_pool = request_pool;
+	                        in request redefines request = request;
+	                    }
+                        then assign mails_to_send := ( mails_to_send,
+                                    '#Mail'( recipient = dual_request_pool.requestor,
+                                            response = '#Response'(
+                                                '@index' = dual_request.'@index',
+                                                '@payload' = send_request.'@payload' )) );
+                        then assign pools_to_remove := (pools_to_remove, dual_request_pool);
+                        then done;
+                    } then done;
+	            } then done; // end of send_synchro : sync_synchro returns
+	            
+	            action receive_synchro {
+	                first start;
+	                then perform search_pending_dual_request;
+                    then
+                    if dual_request != null {
+                    	item send_request : '#SendRequest' = dual_request as '#SendRequest';
+                        first start;
+                        then action ack subsets acknowledge {
+                            in request_pool redefines request_pool = dual_request_pool;
+                            in request redefines request = dual_request;
+                        }
+                        then assign mails_to_send := ( mails_to_send,
+                                    '#Mail'( recipient = request_pool.requestor,
+                                            response = '#Response'(
+                                                '@index' = request.'@index',
+                                                '@payload' = send_request.'@payload' )) );
+                        then assign pools_to_remove := (pools_to_remove, request_pool);
+                        then done;
+                    } then done;
+	            } then done; // end of receive_synchro : sync_synchro returns
+	        } then done; // end of sync_synchro : search_request_synchronization returns
+	    } // end of search_request_synchronization
+	}
+}
+
diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java
index be4ffc9015e16c346d13be94382b7e662ca5189d..75f50c1d85cf966b98b3f9ef6912775d74f093bf 100644
--- a/src/main/java/ui/AvatarDesignPanelTranslator.java
+++ b/src/main/java/ui/AvatarDesignPanelTranslator.java
@@ -49,6 +49,7 @@ import ui.avatarsmd.*;
 import java.awt.*;
 import java.util.*;
 import java.util.List;
+import java.util.function.BiConsumer;
 
 /**
  * Class AvatarDesignPanelTranslator
@@ -1101,21 +1102,44 @@ public class AvatarDesignPanelTranslator {
         return aa;
     }
 
+
+    private class CompleteDataTypeAttribute implements BiConsumer<AvatarAttribute,String> {
+        AvatarSpecification as;
+        public CompleteDataTypeAttribute(AvatarSpecification _as) { as = _as;}
+        public void accept(AvatarAttribute aa, String dt) {
+            AvatarDataType adt = as.getDataTypeByName(dt);
+            if (adt == null) {
+                addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR, "datatype " + dt + "in datatype field " +
+                        aa.getName() + " is undefined (set to integer)"));
+                aa.setType(AvatarType.INTEGER);
+            }
+            else aa.setDataType(adt);
+        }
+    }
     private void createDataTypes(AvatarSpecification _as, List<AvatarBDDataType> _dataTypes) {
+        HashMap<AvatarAttribute,String> attributeMap = new HashMap<AvatarAttribute,String>();
         for(AvatarBDDataType type: _dataTypes) {
             AvatarDataType adt = new AvatarDataType(type.getDataTypeName(), type);
             for(TAttribute ta: type.getAttributeList()) {
-                AvatarType ty;
-                if (ta.getType() == TAttribute.INTEGER) {
-                    ty = AvatarType.INTEGER;
-                } else {
-                    ty = AvatarType.BOOLEAN;
+                AvatarAttribute aa;
+                if (ta.getType() == TAttribute.INTEGER || ta.getType() == TAttribute.NATURAL)
+                    aa = new AvatarAttribute(ta.getName(), AvatarType.INTEGER, null, type);
+                else if (ta.getType() == TAttribute.BOOLEAN)
+                    aa = new AvatarAttribute(ta.getName(), AvatarType.BOOLEAN, null, type);
+                else if (ta.getType() == TAttribute.OTHER) {
+                    aa = new AvatarAttribute(ta.getName(), AvatarType.UNDEFINED, null, type);
+                    attributeMap.put(aa, ta.getTypeOther().trim());
+                }
+                else { // ERROR, should not happen ??
+                    addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,
+                            "Unauthorized type for field " + ta.getId() + " of datatype " + type.getDataTypeName()));
+                    aa = new AvatarAttribute(ta.getName(), AvatarType.INTEGER, null, type);
                 }
-                AvatarAttribute aa = new AvatarAttribute(ta.getName(), ty, null, type);
                 adt.addAttribute(aa);
             }
             _as.addDataType(adt);
-        }
+            attributeMap.forEach(new CompleteDataTypeAttribute(_as));
+       }
     }
 
     private void createLibraryFunctions(AvatarSpecification _as, List<AvatarBDLibraryFunction> _libraryFunctions) {
@@ -1393,6 +1417,8 @@ public class AvatarDesignPanelTranslator {
         if ((rt.compareTo("int") == 0) || (rt.compareTo("bool") == 0)) {
             aa = new AvatarAttribute("return__0", AvatarType.getType(rt), _ab, _block);
             _atam.addReturnParameter(aa);
+            aa = new AvatarAttribute("return__", AvatarType.getType(rt), _ab, _block);
+            _atam.addOriginalReturnParameter(aa);
         } else {
             List<TAttribute> types = adp.getAvatarBDPanel().getAttributesOfDataType(rt);
             if (types == null) {
diff --git a/src/main/java/ui/AvatarPanelDrawer.java b/src/main/java/ui/AvatarPanelDrawer.java
index f2cb6258afce6a74d02308c8386f230ee4e93fc0..0f06bbb4c74609449f156dbc9ccc952d04a909f6 100644
--- a/src/main/java/ui/AvatarPanelDrawer.java
+++ b/src/main/java/ui/AvatarPanelDrawer.java
@@ -306,14 +306,18 @@ public class AvatarPanelDrawer {
 			abdType.setDataTypeName(adt.getName());
 			// Adding attributes
 			for (AvatarAttribute attr : adt.getAttributes()) {
-				int type = 4;
-				if (attr.getType() == AvatarType.INTEGER) {
-					type = 0;
+				if (attr.getType() == AvatarType.UNDEFINED) {
+					abdType.addAttribute(new TAttribute(0, attr.getName(),
+							attr.getType().getDefaultInitialValue(), attr.getDataType().getName()));
 				}
-				if (attr.getType() == AvatarType.TIMER) {
-					type = 9;
+				else {
+					int type = 4;
+					if (attr.getType() == AvatarType.INTEGER) {
+						type = 0;
+					}
+					String initialValue = (attr.getProvidedInitialValue() == null ? "" : attr.getProvidedInitialValue());
+					abdType.addAttribute(new TAttribute(0, attr.getName(), initialValue, type));
 				}
-				abdType.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type));
 			}
 
 
@@ -578,11 +582,15 @@ public class AvatarPanelDrawer {
 			// Guard
 			SMDCon.setTransitionInfo(t.getGuard(useOriginalValuesFirst), action);
 
+			// Probability
+			if (t.getProbability() != t.DEFAULT_PROBABILITY) SMDCon.setTransitionProbability("" + (t.getProbability()));
+
 			// Action
 			for (int i = 1; i < t.getActions().size(); i++) {
 				SMDCon.setTransitionInfo("", t.getAction(i, useOriginalValuesFirst).replaceAll(" ", ""));
 			}
 
+			// Transition Law
 			SMDCon.setTransitionProbability(t.getDelayDistributionLaw(), t.getDelayExtra1(), t.getDelayExtra2());
 
 			smp.addComponent(SMDCon, p1.getX(), p1.getY(), false, true);
@@ -1051,7 +1059,7 @@ public class AvatarPanelDrawer {
 				//TraceManager.addDev("Handling original attributes");
 				//TraceManager.addDev("\tHandling attribute: " + attr);
 				if (attr.isDataType()) {
-					bl.addAttribute(new TAttribute(0, attr.getName(), attr.getInitialValue(), attr.getDataType().getName()));
+					bl.addAttribute(new TAttribute(0, attr.getName(), attr.getProvidedInitialValue(), attr.getDataType().getName()));
 				} else {
 					int type = TAttribute.OTHER;
 					if (attr.getType() == AvatarType.BOOLEAN) {
@@ -1066,7 +1074,7 @@ public class AvatarPanelDrawer {
 					if (attr.hasInitialValue()) {
 						bl.addAttribute(new TAttribute(0, attr.getName(), attr.getInitialValue(), type));
 					} else {
-						bl.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type));
+						bl.addAttribute(new TAttribute(0, attr.getName(), "", type));
 					}
 				}
 
@@ -1092,7 +1100,7 @@ public class AvatarPanelDrawer {
 				if (attr.hasInitialValue()) {
 					bl.addAttribute(new TAttribute(0, attr.getName(), attr.getInitialValue(), type));
 				} else {
-					bl.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type));
+					bl.addAttribute(new TAttribute(0, attr.getName(), "", type));
 				}
 				if (attr.getName().contains("key_") || attr.getName().contains("privKey_")) {
 					hasCrypto = true;
diff --git a/src/main/java/ui/avatarsmd/AvatarSMDConnector.java b/src/main/java/ui/avatarsmd/AvatarSMDConnector.java
index 2e19d3accd37425f11c0b5b69640bed716bdc532..107790ad1fb4d5b7784db021027e9bc6d698f9d4 100644
--- a/src/main/java/ui/avatarsmd/AvatarSMDConnector.java
+++ b/src/main/java/ui/avatarsmd/AvatarSMDConnector.java
@@ -119,6 +119,11 @@ public class AvatarSMDConnector extends TGConnectorWithCommentConnectionPoints i
         }
     }
 
+    public void setTransitionProbability(String probability) {
+        AvatarSMDTransitionInfo tgc = getAvatarSMDTransitionInfo();
+            tgc.setProbability(probability);
+    }
+
     public void setTransitionTime(String minDelay, String maxDelay, String minCompute, String maxCompute) {
         AvatarSMDTransitionInfo tgc = getAvatarSMDTransitionInfo();
         tgc.setTimes(minDelay, maxDelay, minCompute, maxCompute);
diff --git a/ttool/src/test/java/cli/CLIAvatar2SysMLV2Test.java b/ttool/src/test/java/cli/CLIAvatar2SysMLV2Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..e00481e12e603ce78a8d58712fe5e1de243b4f5d
--- /dev/null
+++ b/ttool/src/test/java/cli/CLIAvatar2SysMLV2Test.java
@@ -0,0 +1,150 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ *
+ * /**
+ * Class AvatarPragma
+ * Creation: 20/05/2010
+ * @version 1.1 01/07/2014
+ * @author Ludovic APVRILLE, Raja GATGOUT
+ * @see
+ */
+
+package cli;
+
+import graph.AUTGraph;
+import graph.AUTTransition;
+import myutil.TraceManager;
+import org.junit.Test;
+import test.AbstractTest;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class CLIAvatar2SysMLV2Test extends AbstractTest implements InterpreterOutputInterface {
+
+    final static String PATH_TO_TEST_FILE = "cli/input/";
+    final static String PATH_TO_EXPECTED_FILE = "cli/expected/";
+    final static String PATH_TO_MODELS = "cli/models/";
+    private final String[] toThenFrom = {"CoffeeMachine_Avatar", "avSysML_mixedexample", "PressureController"}; //
+    private StringBuilder outputResult;
+
+
+    public CLIAvatar2SysMLV2Test() {
+        //
+    }
+
+
+    public void exit(int reason) {
+        System.out.println("Exit reason=" + reason);
+        assertTrue(reason == 0);
+    }
+    public void printError(String error) {
+        System.out.println("Error=" + error);
+    }
+
+    public void print(String s) {
+        System.out.println("info from interpreter:" + s);
+        outputResult.append(s);
+    }
+
+    @Test
+    public void testToThenFrom() {
+        String filePath = getBaseResourcesDir() + PATH_TO_TEST_FILE + "scriptavsysml";
+        String script;
+
+        outputResult = new StringBuilder();
+
+        File f = new File(filePath);
+        assertTrue(myutil.FileUtils.checkFileForOpen(f));
+
+        script = myutil.FileUtils.loadFileData(f);
+
+        assertTrue(script.length() > 0);
+        String header = "print dir\n set model resources/test/cli/models/";
+
+        boolean show = false;
+        for(String model : toThenFrom) {
+            System.out.println("Testing Model " + model + ".................................");
+            String modelScript = header + model + ".xml\n" + script;
+            Interpreter interpret = new Interpreter(modelScript, this, show);
+            interpret.clearAvatarSpecification();
+            interpret.interpret();
+
+            // Must now load the graph
+            filePath = "avsysml_ori.aut";
+            f = new File(filePath);
+            assertTrue(myutil.FileUtils.checkFileForOpen(f));
+            String data = myutil.FileUtils.loadFileData(f);
+
+            assertTrue(data.length() > 0);
+            AUTGraph graph = new AUTGraph();
+            graph.buildGraph(data);
+            graph.computeStates();
+            int oristates = graph.getNbOfStates();
+            int oritrans = graph.getNbOfTransitions();
+
+            filePath = "avsysml_tgt.aut";
+            f = new File(filePath);
+            assertTrue(myutil.FileUtils.checkFileForOpen(f));
+            data = myutil.FileUtils.loadFileData(f);
+
+            assertTrue(data.length() > 0);
+            graph = new AUTGraph();
+            graph.buildGraph(data);
+            graph.computeStates();
+            int tgtstates = graph.getNbOfStates();
+            int tgttrans = graph.getNbOfTransitions();
+
+
+            System.out.println("states=" + oristates + ", " + tgtstates + " -- transitions=" + oritrans + ", " + tgttrans);
+            assertTrue(oristates == tgtstates);
+            assertTrue(oritrans == tgttrans);
+        }
+
+
+        // Graph minimization
+
+
+    }
+}
diff --git a/ttool/src/test/resources/cli/input/scriptavsysml b/ttool/src/test/resources/cli/input/scriptavsysml
new file mode 100644
index 0000000000000000000000000000000000000000..5484512aa5a4ff050ba6852f1810064844b1e3f9
--- /dev/null
+++ b/ttool/src/test/resources/cli/input/scriptavsysml
@@ -0,0 +1,20 @@
+action start
+wait 2
+#toto
+action open $model
+wait 4
+action check-syntax
+action avatar-rg -g avsysml_ori.aut
+wait 3
+action ass2 avsysml.sysml
+wait 2
+a als2 avsysml.sysml
+wait 1
+a save
+a new
+a ad
+a sf avsysml2
+a save
+action check-syntax
+action avatar-rg -g avsysml_tgt.aut
+action quit
diff --git a/ttool/src/test/resources/cli/models/avSysML_mixedexample.xml b/ttool/src/test/resources/cli/models/avSysML_mixedexample.xml
new file mode 100644
index 0000000000000000000000000000000000000000..42fb3616b0fff1563a605fbbac83eb6d257811c4
--- /dev/null
+++ b/ttool/src/test/resources/cli/models/avSysML_mixedexample.xml
@@ -0,0 +1,1183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<TURTLEGMODELING version="3.0 beta" ANIMATE_INTERACTIVE_SIMULATION="true" ACTIVATE_PENALTIES="true" UPDATE_INFORMATION_DIPLO_SIM="false" ANIMATE_WITH_INFO_DIPLO_SIM="true" OPEN_DIAG_DIPLO_SIM="false" LAST_SELECTED_MAIN_TAB="0" LAST_SELECTED_SUB_TAB="3">
+
+<Modeling type="AVATAR Design" nameTab="Design" tabs="Block Diagram$B0$B1$B1_0" >
+<AVATARBlockDiagramPanel name="Block Diagram" minX="10" maxX="2500" minY="10" maxY="1500" zoom="1.0" >
+<MainCode value="void __user_init() {"/>
+<MainCode value="}"/>
+<Optimized value="true" />
+<considerTimingOperators value="true" />
+<Validated value="B1;B1_0;B0;" />
+<Ignored value="" />
+
+<CONNECTOR type="5002" id="2" index="0" uid="e2d900d2-9cd1-419a-a79e-03081de16bf0" >
+<cdparam x="338" y="230" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="" />
+<TGConnectingPoint num="0" id="1" />
+<P1  x="315" y="285" id="98" />
+<P2  x="384" y="277" id="13" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+<extraparam>
+<iso value="in in0(int x, Point p, bool b)" />
+<osd value="out out1(int x, Point p, bool b)" />
+<isd value="in in1(int x, Point p, bool b)" />
+<oso value="out out0(int x, Point p, bool b)" />
+<FIFOType asynchronous="false" synchronousCH="true" size="1" blocking="false" private="true" broadcast="false" lossy="false" ams="false" />
+</extraparam>
+</CONNECTOR>
+<COMPONENT type="5000" id="84" index="1" uid="94fc245f-ba93-486c-a741-c888fb20658d" >
+<cdparam x="356" y="175" />
+<sizeparam width="229" height="228" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Block" value="B1" />
+<new d="false" />
+<TGConnectingPoint num="0" id="44" />
+<TGConnectingPoint num="1" id="45" />
+<TGConnectingPoint num="2" id="46" />
+<TGConnectingPoint num="3" id="47" />
+<TGConnectingPoint num="4" id="48" />
+<TGConnectingPoint num="5" id="49" />
+<TGConnectingPoint num="6" id="50" />
+<TGConnectingPoint num="7" id="51" />
+<TGConnectingPoint num="8" id="52" />
+<TGConnectingPoint num="9" id="53" />
+<TGConnectingPoint num="10" id="54" />
+<TGConnectingPoint num="11" id="55" />
+<TGConnectingPoint num="12" id="56" />
+<TGConnectingPoint num="13" id="57" />
+<TGConnectingPoint num="14" id="58" />
+<TGConnectingPoint num="15" id="59" />
+<TGConnectingPoint num="16" id="60" />
+<TGConnectingPoint num="17" id="61" />
+<TGConnectingPoint num="18" id="62" />
+<TGConnectingPoint num="19" id="63" />
+<TGConnectingPoint num="20" id="64" />
+<TGConnectingPoint num="21" id="65" />
+<TGConnectingPoint num="22" id="66" />
+<TGConnectingPoint num="23" id="67" />
+<TGConnectingPoint num="24" id="68" />
+<TGConnectingPoint num="25" id="69" />
+<TGConnectingPoint num="26" id="70" />
+<TGConnectingPoint num="27" id="71" />
+<TGConnectingPoint num="28" id="72" />
+<TGConnectingPoint num="29" id="73" />
+<TGConnectingPoint num="30" id="74" />
+<TGConnectingPoint num="31" id="75" />
+<TGConnectingPoint num="32" id="76" />
+<TGConnectingPoint num="33" id="77" />
+<TGConnectingPoint num="34" id="78" />
+<TGConnectingPoint num="35" id="79" />
+<TGConnectingPoint num="36" id="80" />
+<TGConnectingPoint num="37" id="81" />
+<TGConnectingPoint num="38" id="82" />
+<TGConnectingPoint num="39" id="83" />
+<extraparam>
+<blockType data="block" color="-4072719" />
+<CryptoBlock value="false" />
+</extraparam>
+</COMPONENT>
+<SUBCOMPONENT type="5000" id="43" index="4" uid="2b8839f5-8a46-4ef8-b202-68d15fae0cbb" >
+<father id="84" num="0" />
+<cdparam x="384" y="239" />
+<sizeparam width="183" height="154" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="0" maxX="46" minY="0" maxY="74" />
+<infoparam name="Block0" value="B1_0" />
+<new d="false" />
+<TGConnectingPoint num="0" id="3" />
+<TGConnectingPoint num="1" id="4" />
+<TGConnectingPoint num="2" id="5" />
+<TGConnectingPoint num="3" id="6" />
+<TGConnectingPoint num="4" id="7" />
+<TGConnectingPoint num="5" id="8" />
+<TGConnectingPoint num="6" id="9" />
+<TGConnectingPoint num="7" id="10" />
+<TGConnectingPoint num="8" id="11" />
+<TGConnectingPoint num="9" id="12" />
+<TGConnectingPoint num="10" id="13" />
+<TGConnectingPoint num="11" id="14" />
+<TGConnectingPoint num="12" id="15" />
+<TGConnectingPoint num="13" id="16" />
+<TGConnectingPoint num="14" id="17" />
+<TGConnectingPoint num="15" id="18" />
+<TGConnectingPoint num="16" id="19" />
+<TGConnectingPoint num="17" id="20" />
+<TGConnectingPoint num="18" id="21" />
+<TGConnectingPoint num="19" id="22" />
+<TGConnectingPoint num="20" id="23" />
+<TGConnectingPoint num="21" id="24" />
+<TGConnectingPoint num="22" id="25" />
+<TGConnectingPoint num="23" id="26" />
+<TGConnectingPoint num="24" id="27" />
+<TGConnectingPoint num="25" id="28" />
+<TGConnectingPoint num="26" id="29" />
+<TGConnectingPoint num="27" id="30" />
+<TGConnectingPoint num="28" id="31" />
+<TGConnectingPoint num="29" id="32" />
+<TGConnectingPoint num="30" id="33" />
+<TGConnectingPoint num="31" id="34" />
+<TGConnectingPoint num="32" id="35" />
+<TGConnectingPoint num="33" id="36" />
+<TGConnectingPoint num="34" id="37" />
+<TGConnectingPoint num="35" id="38" />
+<TGConnectingPoint num="36" id="39" />
+<TGConnectingPoint num="37" id="40" />
+<TGConnectingPoint num="38" id="41" />
+<TGConnectingPoint num="39" id="42" />
+<extraparam>
+<blockType data="block" color="-4072719" />
+<CryptoBlock value="false" />
+<Attribute access="0" var="0" id="x" value="0" type="8" typeOther="" />
+<Attribute access="0" var="0" id="b" value="false" type="4" typeOther="" />
+<Attribute access="0" var="0" id="p" value="" type="5" typeOther="Point" />
+<Attribute access="0" var="0" id="t" value="" type="9" typeOther="" />
+<Signal value="in in1(int x, Point p, bool b)" attached="true" />
+<Signal value="out out1(int x, Point p, bool b)" attached="true" />
+</extraparam>
+</SUBCOMPONENT>
+
+<COMPONENT type="5003" id="93" index="2" uid="8aa452d0-d94c-4687-872a-d8da736a353a" >
+<cdparam x="235" y="77" />
+<sizeparam width="93" height="88" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="DataType" value="Point" />
+<new d="false" />
+<TGConnectingPoint num="0" id="85" />
+<TGConnectingPoint num="1" id="86" />
+<TGConnectingPoint num="2" id="87" />
+<TGConnectingPoint num="3" id="88" />
+<TGConnectingPoint num="4" id="89" />
+<TGConnectingPoint num="5" id="90" />
+<TGConnectingPoint num="6" id="91" />
+<TGConnectingPoint num="7" id="92" />
+<extraparam>
+<Attribute access="0" var="0" id="x" value="0" type="8" typeOther="" />
+<Attribute access="0" var="0" id="y" value="0" type="8" typeOther="" />
+</extraparam>
+</COMPONENT>
+
+<COMPONENT type="5000" id="134" index="3" uid="06d9b9cf-d5f5-46a8-ba3d-befc1c5aff9f" >
+<cdparam x="97" y="180" />
+<sizeparam width="218" height="210" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Block" value="B0" />
+<new d="false" />
+<TGConnectingPoint num="0" id="94" />
+<TGConnectingPoint num="1" id="95" />
+<TGConnectingPoint num="2" id="96" />
+<TGConnectingPoint num="3" id="97" />
+<TGConnectingPoint num="4" id="98" />
+<TGConnectingPoint num="5" id="99" />
+<TGConnectingPoint num="6" id="100" />
+<TGConnectingPoint num="7" id="101" />
+<TGConnectingPoint num="8" id="102" />
+<TGConnectingPoint num="9" id="103" />
+<TGConnectingPoint num="10" id="104" />
+<TGConnectingPoint num="11" id="105" />
+<TGConnectingPoint num="12" id="106" />
+<TGConnectingPoint num="13" id="107" />
+<TGConnectingPoint num="14" id="108" />
+<TGConnectingPoint num="15" id="109" />
+<TGConnectingPoint num="16" id="110" />
+<TGConnectingPoint num="17" id="111" />
+<TGConnectingPoint num="18" id="112" />
+<TGConnectingPoint num="19" id="113" />
+<TGConnectingPoint num="20" id="114" />
+<TGConnectingPoint num="21" id="115" />
+<TGConnectingPoint num="22" id="116" />
+<TGConnectingPoint num="23" id="117" />
+<TGConnectingPoint num="24" id="118" />
+<TGConnectingPoint num="25" id="119" />
+<TGConnectingPoint num="26" id="120" />
+<TGConnectingPoint num="27" id="121" />
+<TGConnectingPoint num="28" id="122" />
+<TGConnectingPoint num="29" id="123" />
+<TGConnectingPoint num="30" id="124" />
+<TGConnectingPoint num="31" id="125" />
+<TGConnectingPoint num="32" id="126" />
+<TGConnectingPoint num="33" id="127" />
+<TGConnectingPoint num="34" id="128" />
+<TGConnectingPoint num="35" id="129" />
+<TGConnectingPoint num="36" id="130" />
+<TGConnectingPoint num="37" id="131" />
+<TGConnectingPoint num="38" id="132" />
+<TGConnectingPoint num="39" id="133" />
+<extraparam>
+<blockType data="block" color="-4072719" />
+<CryptoBlock value="false" />
+<Attribute access="0" var="0" id="x" value="" type="8" typeOther="" />
+<Attribute access="0" var="0" id="b" value="" type="4" typeOther="" />
+<Attribute access="0" var="0" id="p" value="" type="5" typeOther="Point" />
+<Attribute access="0" var="0" id="y" value="" type="8" typeOther="" />
+<Method value="Point make(int x, int y)" />
+<Method value="int getx(Point p)" />
+<Method value="foo(bool b, Point p, int x)" />
+<Signal value="in in0(int x, Point p, bool b)" attached="true" />
+<Signal value="out out0(int x, Point p, bool b)" attached="true" />
+</extraparam>
+</COMPONENT>
+
+
+</AVATARBlockDiagramPanel>
+
+<AVATARStateMachineDiagramPanel name="B0" minX="16" maxX="3906" minY="16" maxY="2344" zoom="1.5625" >
+<CONNECTOR type="5102" id="141" index="0" uid="1146a1cf-2f3c-4f6a-9b58-131f269eed11" >
+<cdparam x="359" y="240" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="140" />
+<P1  x="359" y="240" id="175" />
+<P2  x="359" y="309" id="187" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="139" index="9" uid="c3a05878-d247-4b3b-b344-d32b2ad13ad7" >
+<father id="141" num="0" />
+<cdparam x="379" y="240" />
+<sizeparam width="119" height="48" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="16" maxX="3906" minY="16" maxY="2344" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="135" />
+<TGConnectingPoint num="1" id="136" />
+<TGConnectingPoint num="2" id="137" />
+<TGConnectingPoint num="3" id="138" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+<actions value="p = make(x,y)" enabled="true"/>
+<actions value="x = getx(p)" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="148" index="1" uid="1f01956e-7a84-47df-9fd9-f7a45d1e5f4c" >
+<cdparam x="172" y="610" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="3125" maxHeight="3125" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="147" />
+<P1  x="359" y="446" id="164" />
+<P2  x="359" y="493" id="185" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="146" index="10" uid="de96ca94-86cb-4bf3-b63e-421a93ccfc67" >
+<father id="148" num="0" />
+<cdparam x="172" y="668" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="3906" minY="10" maxY="2343" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="142" />
+<TGConnectingPoint num="1" id="143" />
+<TGConnectingPoint num="2" id="144" />
+<TGConnectingPoint num="3" id="145" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="155" index="2" uid="1a1f75f0-3055-4d7a-aa5a-4a70634e3484" >
+<cdparam x="278" y="537" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="3125" maxHeight="3125" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="154" />
+<P1  x="359" y="354" id="188" />
+<P2  x="359" y="401" id="163" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="153" index="11" uid="14ed42f2-4c94-4e0a-9a05-d5bc511d1aa5" >
+<father id="155" num="0" />
+<cdparam x="378" y="350" />
+<sizeparam width="107" height="48" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="3906" minY="10" maxY="2343" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="149" />
+<TGConnectingPoint num="1" id="150" />
+<TGConnectingPoint num="2" id="151" />
+<TGConnectingPoint num="3" id="152" />
+<extraparam>
+<guard value="[p.x&gt;4 ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+<actions value="foo(b,p,x)" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="162" index="3" uid="833ce51f-ce8d-402a-819a-526a0071f83a" >
+<cdparam x="356" y="181" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="3125" maxHeight="3125" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="161" />
+<P1  x="359" y="74" id="190" />
+<P2  x="359" y="195" id="174" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="160" index="12" uid="dd687934-2033-4ae7-a9a0-36d732978073" >
+<father id="162" num="0" />
+<cdparam x="380" y="75" />
+<sizeparam width="112" height="94" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="3906" minY="10" maxY="2343" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="156" />
+<TGConnectingPoint num="1" id="157" />
+<TGConnectingPoint num="2" id="158" />
+<TGConnectingPoint num="3" id="159" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="1" enabled="true"/>
+<afterMax value="p.x" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+<actions value="x = 1" enabled="true"/>
+<actions value="b = true" enabled="true"/>
+<actions value="p.x = x" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<COMPONENT type="5104" id="173" index="4" uid="507ab36b-12af-40a9-b4d3-d1687f4ee635" >
+<cdparam x="303" y="408" />
+<sizeparam width="113" height="31" minWidth="30" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1500" />
+<infoparam name="Receive signal" value="in0(x, p, b)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="163" />
+<TGConnectingPoint num="1" id="164" />
+<TGConnectingPoint num="2" id="165" />
+<TGConnectingPoint num="3" id="166" />
+<TGConnectingPoint num="4" id="167" />
+<TGConnectingPoint num="5" id="168" />
+<TGConnectingPoint num="6" id="169" />
+<TGConnectingPoint num="7" id="170" />
+<TGConnectingPoint num="8" id="171" />
+<TGConnectingPoint num="9" id="172" />
+</COMPONENT>
+
+<COMPONENT type="5103" id="184" index="5" uid="83bfdfcd-2185-424c-ad19-260ec86acd32" >
+<cdparam x="301" y="202" />
+<sizeparam width="116" height="31" minWidth="30" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1500" />
+<infoparam name="Send signal" value="out0(x, p, b)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="174" />
+<TGConnectingPoint num="1" id="175" />
+<TGConnectingPoint num="2" id="176" />
+<TGConnectingPoint num="3" id="177" />
+<TGConnectingPoint num="4" id="178" />
+<TGConnectingPoint num="5" id="179" />
+<TGConnectingPoint num="6" id="180" />
+<TGConnectingPoint num="7" id="181" />
+<TGConnectingPoint num="8" id="182" />
+<TGConnectingPoint num="9" id="183" />
+</COMPONENT>
+
+<COMPONENT type="5101" id="186" index="6" uid="4c83d303-bd2a-4705-9638-d3da5a6d30ba" >
+<cdparam x="344" y="500" />
+<sizeparam width="31" height="31" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="16" maxX="3906" minY="16" maxY="2344" />
+<infoparam name="stop state" value="null" />
+<new d="false" />
+<TGConnectingPoint num="0" id="185" />
+</COMPONENT>
+
+<COMPONENT type="5108" id="189" index="7" uid="c8fc7cc9-d99c-4e2d-b466-4e440c0ba0d7" >
+<cdparam x="261" y="316" />
+<sizeparam width="196" height="31" minWidth="46" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1500" />
+<infoparam name="TGComponent" value="null" />
+<new d="false" />
+<TGConnectingPoint num="0" id="187" />
+<TGConnectingPoint num="1" id="188" />
+<extraparam>
+<Data variable="x" minValue="0" maxValue="p.y" functionId="0" extraAttribute1="" extraAttribute2="" />
+</extraparam>
+</COMPONENT>
+
+<COMPONENT type="5100" id="191" index="8" uid="02d7e1f1-28a4-4403-9e64-d6a4786cea7d" >
+<cdparam x="348" y="44" />
+<sizeparam width="23" height="23" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1500" />
+<infoparam name="start state" value="null" />
+<new d="false" />
+<TGConnectingPoint num="0" id="190" />
+</COMPONENT>
+
+
+</AVATARStateMachineDiagramPanel>
+
+<AVATARStateMachineDiagramPanel name="B1" minX="10" maxX="2500" minY="10" maxY="1500" zoom="1.0" >
+<COMPONENT type="5100" id="193" index="0" uid="5ee8db59-2cb6-4210-9cac-0363ba606b88" >
+<cdparam x="400" y="50" />
+<sizeparam width="15" height="15" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="start state" value="null" />
+<new d="false" />
+<TGConnectingPoint num="0" id="192" />
+</COMPONENT>
+
+
+</AVATARStateMachineDiagramPanel>
+
+<AVATARStateMachineDiagramPanel name="B1_0" minX="10" maxX="2500" minY="10" maxY="1500" zoom="1.0" >
+<CONNECTOR type="5102" id="206" index="0" uid="74d4d087-22e6-4735-a473-2b777a473eee" >
+<cdparam x="519" y="439" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1280" maxHeight="1280" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="202" />
+<TGConnectingPoint num="1" id="203" />
+<TGConnectingPoint num="2" id="204" />
+<TGConnectingPoint num="3" id="205" />
+<P1  x="484" y="427" id="277" />
+<P2  x="404" y="223" id="386" />
+<Point x="484" y="439" />
+<Point x="535" y="439" />
+<Point x="535" y="223" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="194" index="19" uid="36a4768a-9652-43bb-845d-209be2c965da" >
+<father id="206" num="0" />
+<cdparam x="484" y="439" />
+<sizeparam width="8" height="8" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="16" maxX="2499" minY="16" maxY="1500" />
+<infoparam name="point " value="null" />
+<new d="false" />
+</SUBCOMPONENT>
+<SUBCOMPONENT type="-1" id="195" index="20" uid="39ef4810-055d-4eaf-a409-784ef6b1a786" >
+<father id="206" num="1" />
+<cdparam x="535" y="439" />
+<sizeparam width="8" height="8" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="16" maxX="2499" minY="16" maxY="1500" />
+<infoparam name="point " value="null" />
+<new d="false" />
+</SUBCOMPONENT>
+<SUBCOMPONENT type="-1" id="196" index="21" uid="026cf268-175f-4163-a255-750c9c778d1d" >
+<father id="206" num="2" />
+<cdparam x="535" y="223" />
+<sizeparam width="8" height="8" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="16" maxX="2499" minY="16" maxY="1500" />
+<infoparam name="point " value="null" />
+<new d="false" />
+</SUBCOMPONENT>
+<SUBCOMPONENT type="-1" id="201" index="22" uid="7270605d-c970-425f-8bf8-b5065cf75ec2" >
+<father id="206" num="3" />
+<cdparam x="438" y="311" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="16" maxX="2499" minY="16" maxY="1500" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="197" />
+<TGConnectingPoint num="1" id="198" />
+<TGConnectingPoint num="2" id="199" />
+<TGConnectingPoint num="3" id="200" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="213" index="1" uid="928bb940-f1ee-436c-9f17-4857b6f782aa" >
+<cdparam x="484" y="373" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1280" maxHeight="1280" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="212" />
+<P1  x="485" y="373" id="329" />
+<P2  x="484" y="397" id="276" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="211" index="23" uid="0213b0ca-9329-414a-80ad-7921a4d9583b" >
+<father id="213" num="0" />
+<cdparam x="501" y="391" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="16" maxX="2499" minY="16" maxY="1500" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="207" />
+<TGConnectingPoint num="1" id="208" />
+<TGConnectingPoint num="2" id="209" />
+<TGConnectingPoint num="3" id="210" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="226" index="2" uid="bc2e2186-ed41-4917-b20c-6144ac1bf4d7" >
+<cdparam x="429" y="424" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="222" />
+<TGConnectingPoint num="1" id="223" />
+<TGConnectingPoint num="2" id="224" />
+<TGConnectingPoint num="3" id="225" />
+<P1  x="410" y="428" id="288" />
+<P2  x="398" y="348" id="301" />
+<Point x="409" y="441" />
+<Point x="366" y="441" />
+<Point x="366" y="348" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="214" index="24" uid="0de4328e-37e4-435d-81e5-d1d840c7b967" >
+<father id="226" num="0" />
+<cdparam x="409" y="441" />
+<sizeparam width="8" height="8" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="point " value="null" />
+<new d="false" />
+</SUBCOMPONENT>
+<SUBCOMPONENT type="-1" id="215" index="25" uid="4cdf03f5-ab6b-4197-961f-5725ef18f4c2" >
+<father id="226" num="1" />
+<cdparam x="366" y="441" />
+<sizeparam width="8" height="8" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="point " value="null" />
+<new d="false" />
+</SUBCOMPONENT>
+<SUBCOMPONENT type="-1" id="216" index="26" uid="c81192a6-0500-4f55-b09a-6458263194a2" >
+<father id="226" num="2" />
+<cdparam x="366" y="348" />
+<sizeparam width="8" height="8" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="point " value="null" />
+<new d="false" />
+</SUBCOMPONENT>
+<SUBCOMPONENT type="-1" id="221" index="27" uid="fe9df050-f3a4-40b9-be8f-2206708a7e69" >
+<father id="226" num="3" />
+<cdparam x="413" y="386" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="217" />
+<TGConnectingPoint num="1" id="218" />
+<TGConnectingPoint num="2" id="219" />
+<TGConnectingPoint num="3" id="220" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="233" index="3" uid="fbada9ae-ff5e-4412-920c-379b7fa44bea" >
+<cdparam x="422" y="373" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="232" />
+<P1  x="410" y="373" id="326" />
+<P2  x="410" y="398" id="287" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="231" index="28" uid="7a339b9b-cfe9-41af-9206-3daa79b45745" >
+<father id="233" num="0" />
+<cdparam x="425" y="384" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="227" />
+<TGConnectingPoint num="1" id="228" />
+<TGConnectingPoint num="2" id="229" />
+<TGConnectingPoint num="3" id="230" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="240" index="4" uid="90c7cded-4725-4883-8841-04e2104531d6" >
+<cdparam x="397" y="278" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="239" />
+<P1  x="409" y="301" id="372" />
+<P2  x="410" y="323" id="314" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="238" index="29" uid="2b987670-9d6b-4c27-96f4-d6b309ccfb2e" >
+<father id="240" num="0" />
+<cdparam x="396" y="295" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="234" />
+<TGConnectingPoint num="1" id="235" />
+<TGConnectingPoint num="2" id="236" />
+<TGConnectingPoint num="3" id="237" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="247" index="5" uid="6fa3f361-9845-4556-8ba4-a3a14d3111d5" >
+<cdparam x="358" y="209" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="246" />
+<P1  x="391" y="248" id="413" />
+<P2  x="409" y="271" id="371" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="245" index="30" uid="3df7dee5-1456-4a30-9e72-50704be7af2b" >
+<father id="247" num="0" />
+<cdparam x="411" y="248" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="241" />
+<TGConnectingPoint num="1" id="242" />
+<TGConnectingPoint num="2" id="243" />
+<TGConnectingPoint num="3" id="244" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+<actions value="x = 2" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="254" index="6" uid="08f30cae-8315-4af1-ba7e-c7b1d755e30f" >
+<cdparam x="295" y="209" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="253" />
+<P1  x="316" y="248" id="410" />
+<P2  x="298" y="271" id="468" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="252" index="31" uid="50d6509f-dd5f-4b32-9fa5-cf9bf9197a97" >
+<father id="254" num="0" />
+<cdparam x="216" y="227" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="248" />
+<TGConnectingPoint num="1" id="249" />
+<TGConnectingPoint num="2" id="250" />
+<TGConnectingPoint num="3" id="251" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="261" index="7" uid="5c51932f-46f4-459a-9797-88581a319459" >
+<cdparam x="292" y="226" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="260" />
+<P1  x="298" y="299" id="469" />
+<P2  x="298" y="345" id="455" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="259" index="32" uid="ea67405d-8c98-415c-9bf0-24fdf4cb37c4" >
+<father id="261" num="0" />
+<cdparam x="269" y="242" />
+<sizeparam width="73" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2499" minY="10" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="255" />
+<TGConnectingPoint num="1" id="256" />
+<TGConnectingPoint num="2" id="257" />
+<TGConnectingPoint num="3" id="258" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+<userResized />
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="268" index="8" uid="9fbaf0a3-016c-40cc-952d-2d93b5149e83" >
+<cdparam x="292" y="163" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1280" maxHeight="1280" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="267" />
+<P1  x="353" y="178" id="479" />
+<P2  x="354" y="198" id="383" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="266" index="33" uid="ad8b960b-ba33-44a2-9bb8-9ea351468048" >
+<father id="268" num="0" />
+<cdparam x="288" y="112" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="16" maxX="2497" minY="16" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="262" />
+<TGConnectingPoint num="1" id="263" />
+<TGConnectingPoint num="2" id="264" />
+<TGConnectingPoint num="3" id="265" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<CONNECTOR type="5102" id="275" index="9" uid="fd4f056d-39b0-4db4-b956-fe6fd3013328" >
+<cdparam x="298" y="285" />
+<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1280" maxHeight="1280" minDesiredWidth="0" minDesiredHeight="0" />
+<infoparam name="connector" value="null" />
+<TGConnectingPoint num="0" id="274" />
+<P1  x="298" y="373" id="456" />
+<P2  x="298" y="423" id="466" />
+<AutomaticDrawing  data="true" />
+<new d="false" />
+</CONNECTOR><SUBCOMPONENT type="-1" id="273" index="34" uid="80004114-d230-4100-8abd-0089257c3b74" >
+<father id="275" num="0" />
+<cdparam x="297" y="305" />
+<sizeparam width="50" height="25" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="16" maxX="2497" minY="16" maxY="1499" />
+<infoparam name="List of all parameters of an Avatar SMD transition" value="" />
+<new d="false" />
+<TGConnectingPoint num="0" id="269" />
+<TGConnectingPoint num="1" id="270" />
+<TGConnectingPoint num="2" id="271" />
+<TGConnectingPoint num="3" id="272" />
+<extraparam>
+<guard value="[ ]" enabled="true"/>
+<afterMin value="" enabled="true"/>
+<afterMax value="" enabled="true"/>
+<extraDelay1 value="" enabled="true"/>
+<extraDelay2 value="" enabled="true"/>
+<delayDistributionLaw value="0" enabled="true"/>
+<computeMin value="" enabled="true"/>
+<computeMax value="" enabled="true"/>
+<probability value="" enabled="true"/>
+</extraparam>
+</SUBCOMPONENT>
+
+<COMPONENT type="5111" id="286" index="10" uid="62c92403-5ee8-445e-bf96-3e600f59a4b9" >
+<cdparam x="451" y="402" />
+<sizeparam width="66" height="20" minWidth="30" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Reset timer" value="expire(t)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="276" />
+<TGConnectingPoint num="1" id="277" />
+<TGConnectingPoint num="2" id="278" />
+<TGConnectingPoint num="3" id="279" />
+<TGConnectingPoint num="4" id="280" />
+<TGConnectingPoint num="5" id="281" />
+<TGConnectingPoint num="6" id="282" />
+<TGConnectingPoint num="7" id="283" />
+<TGConnectingPoint num="8" id="284" />
+<TGConnectingPoint num="9" id="285" />
+</COMPONENT>
+
+<COMPONENT type="5110" id="297" index="11" uid="491c316f-9dd9-4849-979f-c56b1fd77a3c" >
+<cdparam x="385" y="403" />
+<sizeparam width="51" height="20" minWidth="40" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Reset timer" value="reset(t)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="287" />
+<TGConnectingPoint num="1" id="288" />
+<TGConnectingPoint num="2" id="289" />
+<TGConnectingPoint num="3" id="290" />
+<TGConnectingPoint num="4" id="291" />
+<TGConnectingPoint num="5" id="292" />
+<TGConnectingPoint num="6" id="293" />
+<TGConnectingPoint num="7" id="294" />
+<TGConnectingPoint num="8" id="295" />
+<TGConnectingPoint num="9" id="296" />
+</COMPONENT>
+
+<COMPONENT type="5106" id="370" index="12" uid="153cbc7a-51c9-4403-b1fa-af4ed8ae661e" >
+<cdparam x="398" y="323" />
+<sizeparam width="100" height="50" minWidth="54" minHeight="40" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="state" value="state2" />
+<new d="false" />
+<TGConnectingPoint num="0" id="298" />
+<TGConnectingPoint num="1" id="299" />
+<TGConnectingPoint num="2" id="300" />
+<TGConnectingPoint num="3" id="301" />
+<TGConnectingPoint num="4" id="302" />
+<TGConnectingPoint num="5" id="303" />
+<TGConnectingPoint num="6" id="304" />
+<TGConnectingPoint num="7" id="305" />
+<TGConnectingPoint num="8" id="306" />
+<TGConnectingPoint num="9" id="307" />
+<TGConnectingPoint num="10" id="308" />
+<TGConnectingPoint num="11" id="309" />
+<TGConnectingPoint num="12" id="310" />
+<TGConnectingPoint num="13" id="311" />
+<TGConnectingPoint num="14" id="312" />
+<TGConnectingPoint num="15" id="313" />
+<TGConnectingPoint num="16" id="314" />
+<TGConnectingPoint num="17" id="315" />
+<TGConnectingPoint num="18" id="316" />
+<TGConnectingPoint num="19" id="317" />
+<TGConnectingPoint num="20" id="318" />
+<TGConnectingPoint num="21" id="319" />
+<TGConnectingPoint num="22" id="320" />
+<TGConnectingPoint num="23" id="321" />
+<TGConnectingPoint num="24" id="322" />
+<TGConnectingPoint num="25" id="323" />
+<TGConnectingPoint num="26" id="324" />
+<TGConnectingPoint num="27" id="325" />
+<TGConnectingPoint num="28" id="326" />
+<TGConnectingPoint num="29" id="327" />
+<TGConnectingPoint num="30" id="328" />
+<TGConnectingPoint num="31" id="329" />
+<TGConnectingPoint num="32" id="330" />
+<TGConnectingPoint num="33" id="331" />
+<TGConnectingPoint num="34" id="332" />
+<TGConnectingPoint num="35" id="333" />
+<TGConnectingPoint num="36" id="334" />
+<TGConnectingPoint num="37" id="335" />
+<TGConnectingPoint num="38" id="336" />
+<TGConnectingPoint num="39" id="337" />
+<TGConnectingPoint num="40" id="338" />
+<TGConnectingPoint num="41" id="339" />
+<TGConnectingPoint num="42" id="340" />
+<TGConnectingPoint num="43" id="341" />
+<TGConnectingPoint num="44" id="342" />
+<TGConnectingPoint num="45" id="343" />
+<TGConnectingPoint num="46" id="344" />
+<TGConnectingPoint num="47" id="345" />
+<TGConnectingPoint num="48" id="346" />
+<TGConnectingPoint num="49" id="347" />
+<TGConnectingPoint num="50" id="348" />
+<TGConnectingPoint num="51" id="349" />
+<TGConnectingPoint num="52" id="350" />
+<TGConnectingPoint num="53" id="351" />
+<TGConnectingPoint num="54" id="352" />
+<TGConnectingPoint num="55" id="353" />
+<TGConnectingPoint num="56" id="354" />
+<TGConnectingPoint num="57" id="355" />
+<TGConnectingPoint num="58" id="356" />
+<TGConnectingPoint num="59" id="357" />
+<TGConnectingPoint num="60" id="358" />
+<TGConnectingPoint num="61" id="359" />
+<TGConnectingPoint num="62" id="360" />
+<TGConnectingPoint num="63" id="361" />
+<TGConnectingPoint num="64" id="362" />
+<TGConnectingPoint num="65" id="363" />
+<TGConnectingPoint num="66" id="364" />
+<TGConnectingPoint num="67" id="365" />
+<TGConnectingPoint num="68" id="366" />
+<TGConnectingPoint num="69" id="367" />
+<TGConnectingPoint num="70" id="368" />
+<TGConnectingPoint num="71" id="369" />
+<extraparam>
+</extraparam>
+</COMPONENT>
+
+<COMPONENT type="5109" id="381" index="13" uid="83cdd050-a535-466f-a3bc-8910fe1b1c16" >
+<cdparam x="364" y="276" />
+<sizeparam width="91" height="20" minWidth="40" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Set timer" value="setTimer(t,10)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="371" />
+<TGConnectingPoint num="1" id="372" />
+<TGConnectingPoint num="2" id="373" />
+<TGConnectingPoint num="3" id="374" />
+<TGConnectingPoint num="4" id="375" />
+<TGConnectingPoint num="5" id="376" />
+<TGConnectingPoint num="6" id="377" />
+<TGConnectingPoint num="7" id="378" />
+<TGConnectingPoint num="8" id="379" />
+<TGConnectingPoint num="9" id="380" />
+</COMPONENT>
+
+<COMPONENT type="5106" id="454" index="14" uid="2d76bc2d-5cb6-43ee-8143-f800f7bc2c0f" >
+<cdparam x="304" y="198" />
+<sizeparam width="100" height="50" minWidth="54" minHeight="40" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="state" value="state1" />
+<new d="false" />
+<TGConnectingPoint num="0" id="382" />
+<TGConnectingPoint num="1" id="383" />
+<TGConnectingPoint num="2" id="384" />
+<TGConnectingPoint num="3" id="385" />
+<TGConnectingPoint num="4" id="386" />
+<TGConnectingPoint num="5" id="387" />
+<TGConnectingPoint num="6" id="388" />
+<TGConnectingPoint num="7" id="389" />
+<TGConnectingPoint num="8" id="390" />
+<TGConnectingPoint num="9" id="391" />
+<TGConnectingPoint num="10" id="392" />
+<TGConnectingPoint num="11" id="393" />
+<TGConnectingPoint num="12" id="394" />
+<TGConnectingPoint num="13" id="395" />
+<TGConnectingPoint num="14" id="396" />
+<TGConnectingPoint num="15" id="397" />
+<TGConnectingPoint num="16" id="398" />
+<TGConnectingPoint num="17" id="399" />
+<TGConnectingPoint num="18" id="400" />
+<TGConnectingPoint num="19" id="401" />
+<TGConnectingPoint num="20" id="402" />
+<TGConnectingPoint num="21" id="403" />
+<TGConnectingPoint num="22" id="404" />
+<TGConnectingPoint num="23" id="405" />
+<TGConnectingPoint num="24" id="406" />
+<TGConnectingPoint num="25" id="407" />
+<TGConnectingPoint num="26" id="408" />
+<TGConnectingPoint num="27" id="409" />
+<TGConnectingPoint num="28" id="410" />
+<TGConnectingPoint num="29" id="411" />
+<TGConnectingPoint num="30" id="412" />
+<TGConnectingPoint num="31" id="413" />
+<TGConnectingPoint num="32" id="414" />
+<TGConnectingPoint num="33" id="415" />
+<TGConnectingPoint num="34" id="416" />
+<TGConnectingPoint num="35" id="417" />
+<TGConnectingPoint num="36" id="418" />
+<TGConnectingPoint num="37" id="419" />
+<TGConnectingPoint num="38" id="420" />
+<TGConnectingPoint num="39" id="421" />
+<TGConnectingPoint num="40" id="422" />
+<TGConnectingPoint num="41" id="423" />
+<TGConnectingPoint num="42" id="424" />
+<TGConnectingPoint num="43" id="425" />
+<TGConnectingPoint num="44" id="426" />
+<TGConnectingPoint num="45" id="427" />
+<TGConnectingPoint num="46" id="428" />
+<TGConnectingPoint num="47" id="429" />
+<TGConnectingPoint num="48" id="430" />
+<TGConnectingPoint num="49" id="431" />
+<TGConnectingPoint num="50" id="432" />
+<TGConnectingPoint num="51" id="433" />
+<TGConnectingPoint num="52" id="434" />
+<TGConnectingPoint num="53" id="435" />
+<TGConnectingPoint num="54" id="436" />
+<TGConnectingPoint num="55" id="437" />
+<TGConnectingPoint num="56" id="438" />
+<TGConnectingPoint num="57" id="439" />
+<TGConnectingPoint num="58" id="440" />
+<TGConnectingPoint num="59" id="441" />
+<TGConnectingPoint num="60" id="442" />
+<TGConnectingPoint num="61" id="443" />
+<TGConnectingPoint num="62" id="444" />
+<TGConnectingPoint num="63" id="445" />
+<TGConnectingPoint num="64" id="446" />
+<TGConnectingPoint num="65" id="447" />
+<TGConnectingPoint num="66" id="448" />
+<TGConnectingPoint num="67" id="449" />
+<TGConnectingPoint num="68" id="450" />
+<TGConnectingPoint num="69" id="451" />
+<TGConnectingPoint num="70" id="452" />
+<TGConnectingPoint num="71" id="453" />
+<extraparam>
+</extraparam>
+</COMPONENT>
+
+<COMPONENT type="5103" id="465" index="15" uid="2defadde-3ad2-4986-8807-b8bca2d42df1" >
+<cdparam x="260" y="350" />
+<sizeparam width="76" height="18" minWidth="29" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Send signal" value="out1(x, p, b)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="455" />
+<TGConnectingPoint num="1" id="456" />
+<TGConnectingPoint num="2" id="457" />
+<TGConnectingPoint num="3" id="458" />
+<TGConnectingPoint num="4" id="459" />
+<TGConnectingPoint num="5" id="460" />
+<TGConnectingPoint num="6" id="461" />
+<TGConnectingPoint num="7" id="462" />
+<TGConnectingPoint num="8" id="463" />
+<TGConnectingPoint num="9" id="464" />
+</COMPONENT>
+
+<COMPONENT type="5101" id="467" index="16" uid="3320dfa8-dc96-4387-a94f-25c3a07759ae" >
+<cdparam x="289" y="428" />
+<sizeparam width="18" height="18" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="stop state" value="null" />
+<new d="false" />
+<TGConnectingPoint num="0" id="466" />
+</COMPONENT>
+
+<COMPONENT type="5104" id="478" index="17" uid="6223a7dd-5783-455b-b937-fbe533f02445" >
+<cdparam x="261" y="276" />
+<sizeparam width="74" height="18" minWidth="39" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<enabled value="true" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="Receive signal" value="in1(x, p, b)" />
+<new d="false" />
+<TGConnectingPoint num="0" id="468" />
+<TGConnectingPoint num="1" id="469" />
+<TGConnectingPoint num="2" id="470" />
+<TGConnectingPoint num="3" id="471" />
+<TGConnectingPoint num="4" id="472" />
+<TGConnectingPoint num="5" id="473" />
+<TGConnectingPoint num="6" id="474" />
+<TGConnectingPoint num="7" id="475" />
+<TGConnectingPoint num="8" id="476" />
+<TGConnectingPoint num="9" id="477" />
+</COMPONENT>
+
+<COMPONENT type="5100" id="480" index="18" uid="29fdf48a-fe0e-45e1-b3e2-a04dbeaf94de" >
+<cdparam x="347" y="160" />
+<sizeparam width="13" height="13" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" />
+<hidden value="false" />
+<cdrectangleparam minX="10" maxX="2500" minY="10" maxY="1500" />
+<infoparam name="start state" value="null" />
+<new d="false" />
+<TGConnectingPoint num="0" id="479" />
+</COMPONENT>
+
+
+</AVATARStateMachineDiagramPanel>
+
+</Modeling>
+
+
+
+
+</TURTLEGMODELING>
\ No newline at end of file