// This file is automatically generated by DemeterJ.

EqualVisitor {
  {{
    private java.util.Stack history = new java.util.Stack();
    public EqualVisitor(Object obj) {
      history.push(obj);
    }
  }}

  before Main {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before CollectVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> XAspectLanguage2, aspectlanguage_list, AspectLanguage_List {{
    if (is_equal) {
      XAspectLanguage2 obj = (XAspectLanguage2) history.peek();
      Object temp1 = obj.get_aspectlanguage_list();
      if(temp1==null) { is_equal = false; return; }
      history.push(temp1);
    }
  }}
  after -> XAspectLanguage2, aspectlanguage_list, AspectLanguage_List {{
    if (is_equal) history.pop();
  }}

  before XAspectLanguage2 {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before AspectLanguage {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassDictionaryL, classdictionaryname, ClassDictionaryName {{
    if (is_equal) {
      ClassDictionaryL obj = (ClassDictionaryL) history.peek();
      Object temp2 = obj.get_classdictionaryname();
      if(temp2==null) { is_equal = false; return; }
      history.push(temp2);
    }
  }}
  after -> ClassDictionaryL, classdictionaryname, ClassDictionaryName {{
    if (is_equal) history.pop();
  }}

  before -> ClassDictionaryL, classdict, ClassDict {{
    if (is_equal) {
      ClassDictionaryL obj = (ClassDictionaryL) history.peek();
      Object temp3 = obj.get_classdict();
      if(temp3==null) { is_equal = false; return; }
      history.push(temp3);
    }
  }}
  after -> ClassDictionaryL, classdict, ClassDict {{
    if (is_equal) history.pop();
  }}

  before ClassDictionaryL {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before ClassDictionaryName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp4 = host.get_ident();
    Object temp5 = ((ClassDictionaryName) obj).get_ident();
    if(temp4 == null && temp5 == null) {}
    else if(temp4 == null ||
            temp5 == null ||
            !temp4.equals(temp5)) { is_equal = false; return; }
  }}

  before TraversalName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp6 = host.get_ident();
    Object temp7 = ((TraversalName) obj).get_ident();
    if(temp6 == null && temp7 == null) {}
    else if(temp6 == null ||
            temp7 == null ||
            !temp6.equals(temp7)) { is_equal = false; return; }
  }}

  before -> SelectorL, traversalname, TraversalName {{
    if (is_equal) {
      SelectorL obj = (SelectorL) history.peek();
      Object temp8 = obj.get_traversalname();
      if(temp8==null) { is_equal = false; return; }
      history.push(temp8);
    }
  }}
  after -> SelectorL, traversalname, TraversalName {{
    if (is_equal) history.pop();
  }}

  before -> SelectorL, strategydef_list, StrategyDef_List {{
    if (is_equal) {
      SelectorL obj = (SelectorL) history.peek();
      Object temp9 = obj.get_strategydef_list();
      if(temp9==null) { is_equal = false; return; }
      history.push(temp9);
    }
  }}
  after -> SelectorL, strategydef_list, StrategyDef_List {{
    if (is_equal) history.pop();
  }}

  before -> SelectorL, nodesubsetdef_list, NodeSubsetDef_List {{
    if (is_equal) {
      SelectorL obj = (SelectorL) history.peek();
      Object temp10 = obj.get_nodesubsetdef_list();
      if(temp10==null) { is_equal = false; return; }
      history.push(temp10);
    }
  }}
  after -> SelectorL, nodesubsetdef_list, NodeSubsetDef_List {{
    if (is_equal) history.pop();
  }}

  before -> SelectorL, selectorname, SelectorName {{
    if (is_equal) {
      SelectorL obj = (SelectorL) history.peek();
      Object temp11 = obj.get_selectorname();
      if(temp11==null) { is_equal = false; return; }
      history.push(temp11);
    }
  }}
  after -> SelectorL, selectorname, SelectorName {{
    if (is_equal) history.pop();
  }}

  before -> SelectorL, classdictionaryname, ClassDictionaryName {{
    if (is_equal) {
      SelectorL obj = (SelectorL) history.peek();
      Object temp12 = obj.get_classdictionaryname();
      if(temp12==null) { is_equal = false; return; }
      history.push(temp12);
    }
  }}
  after -> SelectorL, classdictionaryname, ClassDictionaryName {{
    if (is_equal) history.pop();
  }}

  before SelectorL {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> StrategyDef, strategyname, StrategyName {{
    if (is_equal) {
      StrategyDef obj = (StrategyDef) history.peek();
      Object temp13 = obj.get_strategyname();
      if(temp13==null) { is_equal = false; return; }
      history.push(temp13);
    }
  }}
  after -> StrategyDef, strategyname, StrategyName {{
    if (is_equal) history.pop();
  }}

  before -> StrategyDef, strategyexpression, StrategyExpression {{
    if (is_equal) {
      StrategyDef obj = (StrategyDef) history.peek();
      Object temp14 = obj.get_strategyexpression();
      if(temp14==null) { is_equal = false; return; }
      history.push(temp14);
    }
  }}
  after -> StrategyDef, strategyexpression, StrategyExpression {{
    if (is_equal) history.pop();
  }}

  before StrategyDef {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> NodeSubsetDef, nodesubsetname, NodeSubsetName {{
    if (is_equal) {
      NodeSubsetDef obj = (NodeSubsetDef) history.peek();
      Object temp15 = obj.get_nodesubsetname();
      if(temp15==null) { is_equal = false; return; }
      history.push(temp15);
    }
  }}
  after -> NodeSubsetDef, nodesubsetname, NodeSubsetName {{
    if (is_equal) history.pop();
  }}

  before -> NodeSubsetDef, nodesubsetexpression, NodeSubsetExpression {{
    if (is_equal) {
      NodeSubsetDef obj = (NodeSubsetDef) history.peek();
      Object temp16 = obj.get_nodesubsetexpression();
      if(temp16==null) { is_equal = false; return; }
      history.push(temp16);
    }
  }}
  after -> NodeSubsetDef, nodesubsetexpression, NodeSubsetExpression {{
    if (is_equal) history.pop();
  }}

  before NodeSubsetDef {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before SelectorName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp17 = host.get_ident();
    Object temp18 = ((SelectorName) obj).get_ident();
    if(temp17 == null && temp18 == null) {}
    else if(temp17 == null ||
            temp18 == null ||
            !temp17.equals(temp18)) { is_equal = false; return; }
  }}

  before ClassDict {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp19 = host.get_text();
    Object temp20 = ((ClassDict) obj).get_text();
    if(temp19 == null && temp20 == null) {}
    else if(temp19 == null ||
            temp20 == null ||
            !temp19.equals(temp20)) { is_equal = false; return; }
  }}

  before NodeSubsetExpression {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Simple {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> BCompound, op, BinaryOp {{
    if (is_equal) {
      BCompound obj = (BCompound) history.peek();
      Object temp21 = obj.get_op();
      if(temp21==null) { is_equal = false; return; }
      history.push(temp21);
    }
  }}
  after -> BCompound, op, BinaryOp {{
    if (is_equal) history.pop();
  }}

  before -> BCompound, args, NodeSubsetExpression_PCList {{
    if (is_equal) {
      BCompound obj = (BCompound) history.peek();
      Object temp22 = obj.get_args();
      if(temp22==null) { is_equal = false; return; }
      history.push(temp22);
    }
  }}
  after -> BCompound, args, NodeSubsetExpression_PCList {{
    if (is_equal) history.pop();
  }}

  before BCompound {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> UCompound, op, UnaryOp {{
    if (is_equal) {
      UCompound obj = (UCompound) history.peek();
      Object temp23 = obj.get_op();
      if(temp23==null) { is_equal = false; return; }
      history.push(temp23);
    }
  }}
  after -> UCompound, op, UnaryOp {{
    if (is_equal) history.pop();
  }}

  before -> UCompound, arg, NodeSubsetExpression {{
    if (is_equal) {
      UCompound obj = (UCompound) history.peek();
      Object temp24 = obj.get_arg();
      if(temp24==null) { is_equal = false; return; }
      history.push(temp24);
    }
  }}
  after -> UCompound, arg, NodeSubsetExpression {{
    if (is_equal) history.pop();
  }}

  before UCompound {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Operator {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before BinaryOp {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before UnaryOp {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Union {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Intersection {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Complement {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassNameSet, classname_bclist, ClassName_BCList {{
    if (is_equal) {
      ClassNameSet obj = (ClassNameSet) history.peek();
      Object temp25 = obj.get_classname_bclist();
      if(temp25==null) { is_equal = false; return; }
      history.push(temp25);
    }
  }}
  after -> ClassNameSet, classname_bclist, ClassName_BCList {{
    if (is_equal) history.pop();
  }}

  before ClassNameSet {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> GraphNodes, strategyname, StrategyName {{
    if (is_equal) {
      GraphNodes obj = (GraphNodes) history.peek();
      Object temp26 = obj.get_strategyname();
      if(temp26==null) { is_equal = false; return; }
      history.push(temp26);
    }
  }}
  after -> GraphNodes, strategyname, StrategyName {{
    if (is_equal) history.pop();
  }}

  before GraphNodes {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> GraphNodeRegExp, classname, ClassName {{
    if (is_equal) {
      GraphNodeRegExp obj = (GraphNodeRegExp) history.peek();
      Object temp27 = obj.get_classname();
      if(temp27==null) { is_equal = false; return; }
      history.push(temp27);
    }
  }}
  after -> GraphNodeRegExp, classname, ClassName {{
    if (is_equal) history.pop();
  }}

  before -> GraphNodeRegExp, wildcard, WildCard {{
    if (is_equal) {
      GraphNodeRegExp obj = (GraphNodeRegExp) history.peek();
      Object temp28 = obj.get_wildcard();
      if(temp28==null) { is_equal = false; return; }
      history.push(temp28);
    }
  }}
  after -> GraphNodeRegExp, wildcard, WildCard {{
    if (is_equal) history.pop();
  }}

  before GraphNodeRegExp {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before WildCard {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> StrategyExpression, strategy, Strategy {{
    if (is_equal) {
      StrategyExpression obj = (StrategyExpression) history.peek();
      Object temp29 = obj.get_strategy();
      if(temp29==null) { is_equal = false; return; }
      history.push(temp29);
    }
  }}
  after -> StrategyExpression, strategy, Strategy {{
    if (is_equal) history.pop();
  }}

  before StrategyExpression {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Strategy {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SimpleStrategy, parsedNameMap, NameMap {{
    if (is_equal) {
      SimpleStrategy obj = (SimpleStrategy) history.peek();
      Object temp30 = obj.get_parsedNameMap();
      if(temp30==null) { is_equal = false; return; }
      history.push(temp30);
    }
  }}
  after -> SimpleStrategy, parsedNameMap, NameMap {{
    if (is_equal) history.pop();
  }}

  before SimpleStrategy {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> StrategyGraph, edges, SGEdge_SList {{
    if (is_equal) {
      StrategyGraph obj = (StrategyGraph) history.peek();
      Object temp31 = obj.get_edges();
      if(temp31==null) { is_equal = false; return; }
      history.push(temp31);
    }
  }}
  after -> StrategyGraph, edges, SGEdge_SList {{
    if (is_equal) history.pop();
  }}

  before StrategyGraph {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SGEdge, sourcemarker, SourceMarker {{
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp32 = obj.get_sourcemarker();
      if(temp32==null) { is_equal = false; return; }
      history.push(temp32);
    }
  }}
  after -> SGEdge, sourcemarker, SourceMarker {{
    if (is_equal) history.pop();
  }}

  before -> SGEdge, source, GlobSpec {{
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp33 = obj.get_source();
      if(temp33==null) { is_equal = false; return; }
      history.push(temp33);
    }
  }}
  after -> SGEdge, source, GlobSpec {{
    if (is_equal) history.pop();
  }}

  before -> SGEdge, targetmarker, TargetMarker {{
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp34 = obj.get_targetmarker();
      if(temp34==null) { is_equal = false; return; }
      history.push(temp34);
    }
  }}
  after -> SGEdge, targetmarker, TargetMarker {{
    if (is_equal) history.pop();
  }}

  before -> SGEdge, target, GlobSpec {{
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp35 = obj.get_target();
      if(temp35==null) { is_equal = false; return; }
      history.push(temp35);
    }
  }}
  after -> SGEdge, target, GlobSpec {{
    if (is_equal) history.pop();
  }}

  before -> SGEdge, constraint, NegativeConstraint {{
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp36 = obj.get_constraint();
      if(temp36==null) { is_equal = false; return; }
      history.push(temp36);
    }
  }}
  after -> SGEdge, constraint, NegativeConstraint {{
    if (is_equal) history.pop();
  }}

  before SGEdge {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before SourceMarker {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before TargetMarker {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> PathDirective, source, SourceDirective {{
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp37 = obj.get_source();
      if(temp37==null) { is_equal = false; return; }
      history.push(temp37);
    }
  }}
  after -> PathDirective, source, SourceDirective {{
    if (is_equal) history.pop();
  }}

  before -> PathDirective, constraint, NegativeConstraint {{
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp38 = obj.get_constraint();
      if(temp38==null) { is_equal = false; return; }
      history.push(temp38);
    }
  }}
  after -> PathDirective, constraint, NegativeConstraint {{
    if (is_equal) history.pop();
  }}

  before -> PathDirective, segments, PathSegment_List {{
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp39 = obj.get_segments();
      if(temp39==null) { is_equal = false; return; }
      history.push(temp39);
    }
  }}
  after -> PathDirective, segments, PathSegment_List {{
    if (is_equal) history.pop();
  }}

  before -> PathDirective, target, TargetDirective {{
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp40 = obj.get_target();
      if(temp40==null) { is_equal = false; return; }
      history.push(temp40);
    }
  }}
  after -> PathDirective, target, TargetDirective {{
    if (is_equal) history.pop();
  }}

  before PathDirective {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SourceDirective, sources, ClassGlobSpec {{
    if (is_equal) {
      SourceDirective obj = (SourceDirective) history.peek();
      Object temp41 = obj.get_sources();
      if(temp41==null) { is_equal = false; return; }
      history.push(temp41);
    }
  }}
  after -> SourceDirective, sources, ClassGlobSpec {{
    if (is_equal) history.pop();
  }}

  before SourceDirective {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before From {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> PathSegment, node, PositiveConstraint {{
    if (is_equal) {
      PathSegment obj = (PathSegment) history.peek();
      Object temp42 = obj.get_node();
      if(temp42==null) { is_equal = false; return; }
      history.push(temp42);
    }
  }}
  after -> PathSegment, node, PositiveConstraint {{
    if (is_equal) history.pop();
  }}

  before -> PathSegment, constraint, NegativeConstraint {{
    if (is_equal) {
      PathSegment obj = (PathSegment) history.peek();
      Object temp43 = obj.get_constraint();
      if(temp43==null) { is_equal = false; return; }
      history.push(temp43);
    }
  }}
  after -> PathSegment, constraint, NegativeConstraint {{
    if (is_equal) history.pop();
  }}

  before PathSegment {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Constraint, glob, GlobSpec {{
    if (is_equal) {
      Constraint obj = (Constraint) history.peek();
      Object temp44 = obj.get_glob();
      if(temp44==null) { is_equal = false; return; }
      history.push(temp44);
    }
  }}
  after -> Constraint, glob, GlobSpec {{
    if (is_equal) history.pop();
  }}

  before Constraint {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before PositiveConstraint {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Through {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Via {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before NegativeConstraint {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Bypassing {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before OnlyThrough {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> TargetDirective, targets, ClassGlobSpec {{
    if (is_equal) {
      TargetDirective obj = (TargetDirective) history.peek();
      Object temp45 = obj.get_targets();
      if(temp45==null) { is_equal = false; return; }
      history.push(temp45);
    }
  }}
  after -> TargetDirective, targets, ClassGlobSpec {{
    if (is_equal) history.pop();
  }}

  before TargetDirective {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before To {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before ToStop {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> StrategyCombination, first, Strategy {{
    if (is_equal) {
      StrategyCombination obj = (StrategyCombination) history.peek();
      Object temp46 = obj.get_first();
      if(temp46==null) { is_equal = false; return; }
      history.push(temp46);
    }
  }}
  after -> StrategyCombination, first, Strategy {{
    if (is_equal) history.pop();
  }}

  before -> StrategyCombination, rest, Strategy_Commalist {{
    if (is_equal) {
      StrategyCombination obj = (StrategyCombination) history.peek();
      Object temp47 = obj.get_rest();
      if(temp47==null) { is_equal = false; return; }
      history.push(temp47);
    }
  }}
  after -> StrategyCombination, rest, Strategy_Commalist {{
    if (is_equal) history.pop();
  }}

  before StrategyCombination {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Join {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Merge {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Intersect {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before StrategyReference {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp48 = host.get_ident();
    Object temp49 = ((StrategyReference) obj).get_ident();
    if(temp48 == null && temp49 == null) {}
    else if(temp48 == null ||
            temp49 == null ||
            !temp48.equals(temp49)) { is_equal = false; return; }
  }}

  before SymbolicNameMap {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> NameMap, bindings, NameBinding_Commalist {{
    if (is_equal) {
      NameMap obj = (NameMap) history.peek();
      Object temp50 = obj.get_bindings();
      if(temp50==null) { is_equal = false; return; }
      history.push(temp50);
    }
  }}
  after -> NameMap, bindings, NameBinding_Commalist {{
    if (is_equal) history.pop();
  }}

  before NameMap {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> NameBinding, sgName, Name {{
    if (is_equal) {
      NameBinding obj = (NameBinding) history.peek();
      Object temp51 = obj.get_sgName();
      if(temp51==null) { is_equal = false; return; }
      history.push(temp51);
    }
  }}
  after -> NameBinding, sgName, Name {{
    if (is_equal) history.pop();
  }}

  before -> NameBinding, cgNames, ClassGlobSpec {{
    if (is_equal) {
      NameBinding obj = (NameBinding) history.peek();
      Object temp52 = obj.get_cgNames();
      if(temp52==null) { is_equal = false; return; }
      history.push(temp52);
    }
  }}
  after -> NameBinding, cgNames, ClassGlobSpec {{
    if (is_equal) history.pop();
  }}

  before NameBinding {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before GlobSpec {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> OneGlob, glob, Glob {{
    if (is_equal) {
      OneGlob obj = (OneGlob) history.peek();
      Object temp53 = obj.get_glob();
      if(temp53==null) { is_equal = false; return; }
      history.push(temp53);
    }
  }}
  after -> OneGlob, glob, Glob {{
    if (is_equal) history.pop();
  }}

  before OneGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> GlobSet, globs, Glob_Commalist {{
    if (is_equal) {
      GlobSet obj = (GlobSet) history.peek();
      Object temp54 = obj.get_globs();
      if(temp54==null) { is_equal = false; return; }
      history.push(temp54);
    }
  }}
  after -> GlobSet, globs, Glob_Commalist {{
    if (is_equal) history.pop();
  }}

  before GlobSet {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Glob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before EdgeGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassGlob, name, ClassNameGlob {{
    if (is_equal) {
      ClassGlob obj = (ClassGlob) history.peek();
      Object temp55 = obj.get_name();
      if(temp55==null) { is_equal = false; return; }
      history.push(temp55);
    }
  }}
  after -> ClassGlob, name, ClassNameGlob {{
    if (is_equal) history.pop();
  }}

  before ClassGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> PartGlob, source, SourceGlob {{
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      Object temp56 = obj.get_source();
      if(temp56==null) { is_equal = false; return; }
      history.push(temp56);
    }
  }}
  after -> PartGlob, source, SourceGlob {{
    if (is_equal) history.pop();
  }}

  before -> PartGlob, name, PartNameGlob {{
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      Object temp57 = obj.get_name();
      if(temp57==null) { is_equal = false; return; }
      history.push(temp57);
    }
  }}
  after -> PartGlob, name, PartNameGlob {{
    if (is_equal) history.pop();
  }}

  before -> PartGlob, target, TargetGlob {{
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      Object temp58 = obj.get_target();
      if(temp58==null) { is_equal = false; return; }
      history.push(temp58);
    }
  }}
  after -> PartGlob, target, TargetGlob {{
    if (is_equal) history.pop();
  }}

  before PartGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SubclassGlob, source, SourceGlob {{
    if (is_equal) {
      SubclassGlob obj = (SubclassGlob) history.peek();
      Object temp59 = obj.get_source();
      if(temp59==null) { is_equal = false; return; }
      history.push(temp59);
    }
  }}
  after -> SubclassGlob, source, SourceGlob {{
    if (is_equal) history.pop();
  }}

  before -> SubclassGlob, target, TargetGlob {{
    if (is_equal) {
      SubclassGlob obj = (SubclassGlob) history.peek();
      Object temp60 = obj.get_target();
      if(temp60==null) { is_equal = false; return; }
      history.push(temp60);
    }
  }}
  after -> SubclassGlob, target, TargetGlob {{
    if (is_equal) history.pop();
  }}

  before SubclassGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SuperclassGlob, source, SourceGlob {{
    if (is_equal) {
      SuperclassGlob obj = (SuperclassGlob) history.peek();
      Object temp61 = obj.get_source();
      if(temp61==null) { is_equal = false; return; }
      history.push(temp61);
    }
  }}
  after -> SuperclassGlob, source, SourceGlob {{
    if (is_equal) history.pop();
  }}

  before -> SuperclassGlob, target, TargetGlob {{
    if (is_equal) {
      SuperclassGlob obj = (SuperclassGlob) history.peek();
      Object temp62 = obj.get_target();
      if(temp62==null) { is_equal = false; return; }
      history.push(temp62);
    }
  }}
  after -> SuperclassGlob, target, TargetGlob {{
    if (is_equal) history.pop();
  }}

  before SuperclassGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SourceGlob, name, ClassNameGlob {{
    if (is_equal) {
      SourceGlob obj = (SourceGlob) history.peek();
      Object temp63 = obj.get_name();
      if(temp63==null) { is_equal = false; return; }
      history.push(temp63);
    }
  }}
  after -> SourceGlob, name, ClassNameGlob {{
    if (is_equal) history.pop();
  }}

  before SourceGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> TargetGlob, name, ClassNameGlob {{
    if (is_equal) {
      TargetGlob obj = (TargetGlob) history.peek();
      Object temp64 = obj.get_name();
      if(temp64==null) { is_equal = false; return; }
      history.push(temp64);
    }
  }}
  after -> TargetGlob, name, ClassNameGlob {{
    if (is_equal) history.pop();
  }}

  before TargetGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before ClassNameGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassNameExact, classname, ClassName {{
    if (is_equal) {
      ClassNameExact obj = (ClassNameExact) history.peek();
      Object temp65 = obj.get_classname();
      if(temp65==null) { is_equal = false; return; }
      history.push(temp65);
    }
  }}
  after -> ClassNameExact, classname, ClassName {{
    if (is_equal) history.pop();
  }}

  before ClassNameExact {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before AnyClass {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before PartNameGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> PartNameExact, partname, PartName {{
    if (is_equal) {
      PartNameExact obj = (PartNameExact) history.peek();
      Object temp66 = obj.get_partname();
      if(temp66==null) { is_equal = false; return; }
      history.push(temp66);
    }
  }}
  after -> PartNameExact, partname, PartName {{
    if (is_equal) history.pop();
  }}

  before PartNameExact {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before AnyPart {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before ClassGlobSpec {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> OneClassGlob, classglob, ClassGlob {{
    if (is_equal) {
      OneClassGlob obj = (OneClassGlob) history.peek();
      Object temp67 = obj.get_classglob();
      if(temp67==null) { is_equal = false; return; }
      history.push(temp67);
    }
  }}
  after -> OneClassGlob, classglob, ClassGlob {{
    if (is_equal) history.pop();
  }}

  before OneClassGlob {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassGlobSet, globs, ClassGlob_Commalist {{
    if (is_equal) {
      ClassGlobSet obj = (ClassGlobSet) history.peek();
      Object temp68 = obj.get_globs();
      if(temp68==null) { is_equal = false; return; }
      history.push(temp68);
    }
  }}
  after -> ClassGlobSet, globs, ClassGlob_Commalist {{
    if (is_equal) history.pop();
  }}

  before ClassGlobSet {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassName, name, Name {{
    if (is_equal) {
      ClassName obj = (ClassName) history.peek();
      Object temp69 = obj.get_name();
      if(temp69==null) { is_equal = false; return; }
      history.push(temp69);
    }
  }}
  after -> ClassName, name, Name {{
    if (is_equal) history.pop();
  }}

  before ClassName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before PartName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp70 = host.get_name();
    Object temp71 = ((PartName) obj).get_name();
    if(temp70 == null && temp71 == null) {}
    else if(temp70 == null ||
            temp71 == null ||
            !temp70.equals(temp71)) { is_equal = false; return; }
  }}

  before -> Name, first, Nonempty_Name {{
    if (is_equal) {
      Name obj = (Name) history.peek();
      Object temp72 = obj.get_first();
      if(temp72==null) { is_equal = false; return; }
      history.push(temp72);
    }
  }}
  after -> Name, first, Nonempty_Name {{
    if (is_equal) history.pop();
  }}

  before Name {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before StrategyName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp73 = host.get_name();
    Object temp74 = ((StrategyName) obj).get_name();
    if(temp73 == null && temp74 == null) {}
    else if(temp73 == null ||
            temp74 == null ||
            !temp73.equals(temp74)) { is_equal = false; return; }
  }}

  before NodeSubsetName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp75 = host.get_name();
    Object temp76 = ((NodeSubsetName) obj).get_name();
    if(temp75 == null && temp76 == null) {}
    else if(temp75 == null ||
            temp76 == null ||
            !temp75.equals(temp76)) { is_equal = false; return; }
  }}

  before SymbolicNameMapI {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before GlobVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before PrintVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((PrintVisitor) obj).get_indent();
    is_equal = is_equal && host.get_needSpace() == ((PrintVisitor) obj).get_needSpace();
  }}

  before CopyVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp77 = host.get_copy();
    Object temp78 = ((CopyVisitor) obj).get_copy();
    if(temp77 == null && temp78 == null) {}
    else if(temp77 == null ||
            temp78 == null ||
            !temp77.equals(temp78)) { is_equal = false; return; }
  }}

  before SubgraphVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((SubgraphVisitor) obj).get_is_equal();
  }}

  before EqualVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((EqualVisitor) obj).get_is_equal();
  }}

  before DisplayVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((DisplayVisitor) obj).get_indent();
  }}

  before TraceVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((TraceVisitor) obj).get_indent();
  }}

  before UniversalVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> AspectLanguage_List, first, Nonempty_AspectLanguage_List {{
    if (is_equal) {
      AspectLanguage_List obj = (AspectLanguage_List) history.peek();
      Object temp79 = obj.get_first();
      if(temp79==null) { is_equal = false; return; }
      history.push(temp79);
    }
  }}
  after -> AspectLanguage_List, first, Nonempty_AspectLanguage_List {{
    if (is_equal) history.pop();
  }}

  before AspectLanguage_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> StrategyDef_List, first, Nonempty_StrategyDef_List {{
    if (is_equal) {
      StrategyDef_List obj = (StrategyDef_List) history.peek();
      Object temp80 = obj.get_first();
      if(temp80==null) { is_equal = false; return; }
      history.push(temp80);
    }
  }}
  after -> StrategyDef_List, first, Nonempty_StrategyDef_List {{
    if (is_equal) history.pop();
  }}

  before StrategyDef_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> NodeSubsetDef_List, first, Nonempty_NodeSubsetDef_List {{
    if (is_equal) {
      NodeSubsetDef_List obj = (NodeSubsetDef_List) history.peek();
      Object temp81 = obj.get_first();
      if(temp81==null) { is_equal = false; return; }
      history.push(temp81);
    }
  }}
  after -> NodeSubsetDef_List, first, Nonempty_NodeSubsetDef_List {{
    if (is_equal) history.pop();
  }}

  before NodeSubsetDef_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> NodeSubsetExpression_PCList, first, Nonempty_NodeSubsetExpression_PCList {{
    if (is_equal) {
      NodeSubsetExpression_PCList obj = (NodeSubsetExpression_PCList) history.peek();
      Object temp82 = obj.get_first();
      if(temp82==null) { is_equal = false; return; }
      history.push(temp82);
    }
  }}
  after -> NodeSubsetExpression_PCList, first, Nonempty_NodeSubsetExpression_PCList {{
    if (is_equal) history.pop();
  }}

  before NodeSubsetExpression_PCList {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassName_BCList, first, Nonempty_ClassName_BCList {{
    if (is_equal) {
      ClassName_BCList obj = (ClassName_BCList) history.peek();
      Object temp83 = obj.get_first();
      if(temp83==null) { is_equal = false; return; }
      history.push(temp83);
    }
  }}
  after -> ClassName_BCList, first, Nonempty_ClassName_BCList {{
    if (is_equal) history.pop();
  }}

  before ClassName_BCList {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SGEdge_SList, first, Nonempty_SGEdge_SList {{
    if (is_equal) {
      SGEdge_SList obj = (SGEdge_SList) history.peek();
      Object temp84 = obj.get_first();
      if(temp84==null) { is_equal = false; return; }
      history.push(temp84);
    }
  }}
  after -> SGEdge_SList, first, Nonempty_SGEdge_SList {{
    if (is_equal) history.pop();
  }}

  before SGEdge_SList {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> PathSegment_List, first, Nonempty_PathSegment_List {{
    if (is_equal) {
      PathSegment_List obj = (PathSegment_List) history.peek();
      Object temp85 = obj.get_first();
      if(temp85==null) { is_equal = false; return; }
      history.push(temp85);
    }
  }}
  after -> PathSegment_List, first, Nonempty_PathSegment_List {{
    if (is_equal) history.pop();
  }}

  before PathSegment_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Strategy_Commalist, first, Nonempty_Strategy_Commalist {{
    if (is_equal) {
      Strategy_Commalist obj = (Strategy_Commalist) history.peek();
      Object temp86 = obj.get_first();
      if(temp86==null) { is_equal = false; return; }
      history.push(temp86);
    }
  }}
  after -> Strategy_Commalist, first, Nonempty_Strategy_Commalist {{
    if (is_equal) history.pop();
  }}

  before Strategy_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> NameBinding_Commalist, first, Nonempty_NameBinding_Commalist {{
    if (is_equal) {
      NameBinding_Commalist obj = (NameBinding_Commalist) history.peek();
      Object temp87 = obj.get_first();
      if(temp87==null) { is_equal = false; return; }
      history.push(temp87);
    }
  }}
  after -> NameBinding_Commalist, first, Nonempty_NameBinding_Commalist {{
    if (is_equal) history.pop();
  }}

  before NameBinding_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Glob_Commalist, first, Nonempty_Glob_Commalist {{
    if (is_equal) {
      Glob_Commalist obj = (Glob_Commalist) history.peek();
      Object temp88 = obj.get_first();
      if(temp88==null) { is_equal = false; return; }
      history.push(temp88);
    }
  }}
  after -> Glob_Commalist, first, Nonempty_Glob_Commalist {{
    if (is_equal) history.pop();
  }}

  before Glob_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> ClassGlob_Commalist, first, Nonempty_ClassGlob_Commalist {{
    if (is_equal) {
      ClassGlob_Commalist obj = (ClassGlob_Commalist) history.peek();
      Object temp89 = obj.get_first();
      if(temp89==null) { is_equal = false; return; }
      history.push(temp89);
    }
  }}
  after -> ClassGlob_Commalist, first, Nonempty_ClassGlob_Commalist {{
    if (is_equal) history.pop();
  }}

  before ClassGlob_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_Name, next, Nonempty_Name {{
    if (is_equal) {
      Nonempty_Name obj = (Nonempty_Name) history.peek();
      Object temp92 = obj.get_next();
      if(temp92==null) { is_equal = false; return; }
      history.push(temp92);
    }
  }}
  after -> Nonempty_Name, next, Nonempty_Name {{
    if (is_equal) history.pop();
  }}

  before Nonempty_Name {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp90 = host.get_it();
    Object temp91 = ((Nonempty_Name) obj).get_it();
    if(temp90 == null && temp91 == null) {}
    else if(temp90 == null ||
            temp91 == null ||
            !temp90.equals(temp91)) { is_equal = false; return; }
  }}

  before -> Nonempty_AspectLanguage_List, it, AspectLanguage {{
    if (is_equal) {
      Nonempty_AspectLanguage_List obj = (Nonempty_AspectLanguage_List) history.peek();
      Object temp93 = obj.get_it();
      if(temp93==null) { is_equal = false; return; }
      history.push(temp93);
    }
  }}
  after -> Nonempty_AspectLanguage_List, it, AspectLanguage {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_AspectLanguage_List, next, Nonempty_AspectLanguage_List {{
    if (is_equal) {
      Nonempty_AspectLanguage_List obj = (Nonempty_AspectLanguage_List) history.peek();
      Object temp94 = obj.get_next();
      if(temp94==null) { is_equal = false; return; }
      history.push(temp94);
    }
  }}
  after -> Nonempty_AspectLanguage_List, next, Nonempty_AspectLanguage_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_AspectLanguage_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_StrategyDef_List, it, StrategyDef {{
    if (is_equal) {
      Nonempty_StrategyDef_List obj = (Nonempty_StrategyDef_List) history.peek();
      Object temp95 = obj.get_it();
      if(temp95==null) { is_equal = false; return; }
      history.push(temp95);
    }
  }}
  after -> Nonempty_StrategyDef_List, it, StrategyDef {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_StrategyDef_List, next, Nonempty_StrategyDef_List {{
    if (is_equal) {
      Nonempty_StrategyDef_List obj = (Nonempty_StrategyDef_List) history.peek();
      Object temp96 = obj.get_next();
      if(temp96==null) { is_equal = false; return; }
      history.push(temp96);
    }
  }}
  after -> Nonempty_StrategyDef_List, next, Nonempty_StrategyDef_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_StrategyDef_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_NodeSubsetDef_List, it, NodeSubsetDef {{
    if (is_equal) {
      Nonempty_NodeSubsetDef_List obj = (Nonempty_NodeSubsetDef_List) history.peek();
      Object temp97 = obj.get_it();
      if(temp97==null) { is_equal = false; return; }
      history.push(temp97);
    }
  }}
  after -> Nonempty_NodeSubsetDef_List, it, NodeSubsetDef {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_NodeSubsetDef_List, next, Nonempty_NodeSubsetDef_List {{
    if (is_equal) {
      Nonempty_NodeSubsetDef_List obj = (Nonempty_NodeSubsetDef_List) history.peek();
      Object temp98 = obj.get_next();
      if(temp98==null) { is_equal = false; return; }
      history.push(temp98);
    }
  }}
  after -> Nonempty_NodeSubsetDef_List, next, Nonempty_NodeSubsetDef_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_NodeSubsetDef_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_NodeSubsetExpression_PCList, it, NodeSubsetExpression {{
    if (is_equal) {
      Nonempty_NodeSubsetExpression_PCList obj = (Nonempty_NodeSubsetExpression_PCList) history.peek();
      Object temp99 = obj.get_it();
      if(temp99==null) { is_equal = false; return; }
      history.push(temp99);
    }
  }}
  after -> Nonempty_NodeSubsetExpression_PCList, it, NodeSubsetExpression {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_NodeSubsetExpression_PCList, next, Nonempty_NodeSubsetExpression_PCList {{
    if (is_equal) {
      Nonempty_NodeSubsetExpression_PCList obj = (Nonempty_NodeSubsetExpression_PCList) history.peek();
      Object temp100 = obj.get_next();
      if(temp100==null) { is_equal = false; return; }
      history.push(temp100);
    }
  }}
  after -> Nonempty_NodeSubsetExpression_PCList, next, Nonempty_NodeSubsetExpression_PCList {{
    if (is_equal) history.pop();
  }}

  before Nonempty_NodeSubsetExpression_PCList {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_ClassName_BCList, it, ClassName {{
    if (is_equal) {
      Nonempty_ClassName_BCList obj = (Nonempty_ClassName_BCList) history.peek();
      Object temp101 = obj.get_it();
      if(temp101==null) { is_equal = false; return; }
      history.push(temp101);
    }
  }}
  after -> Nonempty_ClassName_BCList, it, ClassName {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_ClassName_BCList, next, Nonempty_ClassName_BCList {{
    if (is_equal) {
      Nonempty_ClassName_BCList obj = (Nonempty_ClassName_BCList) history.peek();
      Object temp102 = obj.get_next();
      if(temp102==null) { is_equal = false; return; }
      history.push(temp102);
    }
  }}
  after -> Nonempty_ClassName_BCList, next, Nonempty_ClassName_BCList {{
    if (is_equal) history.pop();
  }}

  before Nonempty_ClassName_BCList {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_SGEdge_SList, it, SGEdge {{
    if (is_equal) {
      Nonempty_SGEdge_SList obj = (Nonempty_SGEdge_SList) history.peek();
      Object temp103 = obj.get_it();
      if(temp103==null) { is_equal = false; return; }
      history.push(temp103);
    }
  }}
  after -> Nonempty_SGEdge_SList, it, SGEdge {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_SGEdge_SList, next, Nonempty_SGEdge_SList {{
    if (is_equal) {
      Nonempty_SGEdge_SList obj = (Nonempty_SGEdge_SList) history.peek();
      Object temp104 = obj.get_next();
      if(temp104==null) { is_equal = false; return; }
      history.push(temp104);
    }
  }}
  after -> Nonempty_SGEdge_SList, next, Nonempty_SGEdge_SList {{
    if (is_equal) history.pop();
  }}

  before Nonempty_SGEdge_SList {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_PathSegment_List, it, PathSegment {{
    if (is_equal) {
      Nonempty_PathSegment_List obj = (Nonempty_PathSegment_List) history.peek();
      Object temp105 = obj.get_it();
      if(temp105==null) { is_equal = false; return; }
      history.push(temp105);
    }
  }}
  after -> Nonempty_PathSegment_List, it, PathSegment {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_PathSegment_List, next, Nonempty_PathSegment_List {{
    if (is_equal) {
      Nonempty_PathSegment_List obj = (Nonempty_PathSegment_List) history.peek();
      Object temp106 = obj.get_next();
      if(temp106==null) { is_equal = false; return; }
      history.push(temp106);
    }
  }}
  after -> Nonempty_PathSegment_List, next, Nonempty_PathSegment_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_PathSegment_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_Strategy_Commalist, it, Strategy {{
    if (is_equal) {
      Nonempty_Strategy_Commalist obj = (Nonempty_Strategy_Commalist) history.peek();
      Object temp107 = obj.get_it();
      if(temp107==null) { is_equal = false; return; }
      history.push(temp107);
    }
  }}
  after -> Nonempty_Strategy_Commalist, it, Strategy {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_Strategy_Commalist, next, Nonempty_Strategy_Commalist {{
    if (is_equal) {
      Nonempty_Strategy_Commalist obj = (Nonempty_Strategy_Commalist) history.peek();
      Object temp108 = obj.get_next();
      if(temp108==null) { is_equal = false; return; }
      history.push(temp108);
    }
  }}
  after -> Nonempty_Strategy_Commalist, next, Nonempty_Strategy_Commalist {{
    if (is_equal) history.pop();
  }}

  before Nonempty_Strategy_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_NameBinding_Commalist, it, NameBinding {{
    if (is_equal) {
      Nonempty_NameBinding_Commalist obj = (Nonempty_NameBinding_Commalist) history.peek();
      Object temp109 = obj.get_it();
      if(temp109==null) { is_equal = false; return; }
      history.push(temp109);
    }
  }}
  after -> Nonempty_NameBinding_Commalist, it, NameBinding {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_NameBinding_Commalist, next, Nonempty_NameBinding_Commalist {{
    if (is_equal) {
      Nonempty_NameBinding_Commalist obj = (Nonempty_NameBinding_Commalist) history.peek();
      Object temp110 = obj.get_next();
      if(temp110==null) { is_equal = false; return; }
      history.push(temp110);
    }
  }}
  after -> Nonempty_NameBinding_Commalist, next, Nonempty_NameBinding_Commalist {{
    if (is_equal) history.pop();
  }}

  before Nonempty_NameBinding_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_Glob_Commalist, it, Glob {{
    if (is_equal) {
      Nonempty_Glob_Commalist obj = (Nonempty_Glob_Commalist) history.peek();
      Object temp111 = obj.get_it();
      if(temp111==null) { is_equal = false; return; }
      history.push(temp111);
    }
  }}
  after -> Nonempty_Glob_Commalist, it, Glob {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_Glob_Commalist, next, Nonempty_Glob_Commalist {{
    if (is_equal) {
      Nonempty_Glob_Commalist obj = (Nonempty_Glob_Commalist) history.peek();
      Object temp112 = obj.get_next();
      if(temp112==null) { is_equal = false; return; }
      history.push(temp112);
    }
  }}
  after -> Nonempty_Glob_Commalist, next, Nonempty_Glob_Commalist {{
    if (is_equal) history.pop();
  }}

  before Nonempty_Glob_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_ClassGlob_Commalist, it, ClassGlob {{
    if (is_equal) {
      Nonempty_ClassGlob_Commalist obj = (Nonempty_ClassGlob_Commalist) history.peek();
      Object temp113 = obj.get_it();
      if(temp113==null) { is_equal = false; return; }
      history.push(temp113);
    }
  }}
  after -> Nonempty_ClassGlob_Commalist, it, ClassGlob {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_ClassGlob_Commalist, next, Nonempty_ClassGlob_Commalist {{
    if (is_equal) {
      Nonempty_ClassGlob_Commalist obj = (Nonempty_ClassGlob_Commalist) history.peek();
      Object temp114 = obj.get_next();
      if(temp114==null) { is_equal = false; return; }
      history.push(temp114);
    }
  }}
  after -> Nonempty_ClassGlob_Commalist, next, Nonempty_ClassGlob_Commalist {{
    if (is_equal) history.pop();
  }}

  before Nonempty_ClassGlob_Commalist {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  return boolean {{ is_equal }}
}